0

我在 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;
4

1 回答 1

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,}))$

于 2013-04-01T02:04:58.250 回答