具有不同长度的电话号码的正则表达式

时间:2013-04-01 01:54:40

标签: javascript regex

我在Google上搜索了电话号码正则表达式验证,但未能根据我的要求使其正常工作。

基本上,我有三组不同的前缀规则:

  • 对于10位数字,我需要确保前3个是从2-9开始的数字。
  • 对于11位数字,我需要确保前4个是从1-9开始的数字。
  • 对于任何大于12位的数字,我需要确保前7位是0-9的数字。

之后我可以允许像1888GOSUPER这样的字母或类似的东西(这将属于第二个条件)

这是我到目前为止所做的,但我不确定我是否涵盖了所有内容:

var reg10 = /^[2-9]{3}[a-z0-9]+$/i;
var reg11 = /^[1-9]{4}[a-z0-9]+$/i;
var reg12plus = /^[0-9]{7}[a-z0-9]+$/i;

1 个答案:

答案 0 :(得分:3)

这可以由一个正则表达式处理(包括您的检查长度,如其他人所建议的)。可能比这更简洁,但我觉得这在你特定的3个前缀要求的上下文中更具可读性:

^(?:[2-9]{3}[a-z0-9]{7})$|^(?:[1-9]{4}[a-z0-9]{7})$|^(?:[0-9]{7}[a-z0-9]{5,})$

基本上通过“交替”|

组合您的三个独立案例

这可以稍微“标准化”,不会“破坏”意图的清晰度,通过对整个表达式进行分组,然后用开始/结束锚定(而不是在每个选项中重复这些,如上所述)。虽然这会产生类似的长度规则,但是当我们添加额外的非捕获组时:

^(?:(?:[2-9]{3}[a-z0-9]{7})|(?:[1-9]{4}[a-z0-9]{7})|(?:[0-9]{7}[a-z0-9]{5,}))$