3

我对我的要求进行了单独的正则表达式验证,但努力将它们组合在一起。我正在验证带有国家/地区代码或以 00 开头的手机号码,并且它们是否包含以 # 分隔的分机号(2-5 位)

以下是有效 Number 的示例:

+919986040933
00919986040933
+919986040933#12
+919986040933#123
+919986040933#1234
+919986040933#12345

我有以下正则表达式来验证上述内容:

var phoneRegexWithPlus = "^((\\+)|(00))[0-9]{10,14}$";
var phoneRegexWithZero = "^((\\+)|(00))[0-9]{9,12}$";
var phoneRegexExtension = "^[0-9]{2,5}$";

目前我正在检查数字是否包含#,如果是,则将其拆分并分别匹配数字和扩展部分,其中扩展在哈希之后出现。

我现在的问题是我必须创建一个结合上述三个的正则表达式,任何人都可以帮助我解决这个问题,因为 m 在正则表达式中不好。提前致谢。

4

1 回答 1

1

我建议这样的表达:

^\+?(?:00)?\d{12}(?:#\d{2,5})?$

查看正则表达式演示

表达式解释

  • ^- 字符串的开始
  • \+?- 一个可选的加号(?匹配+一次或零次)
  • (?:00)?- 一个可选的00
  • \d{12}- 正好是 12 位字符串
  • (?:#\d{2,5})?- 一个可选的(同样,?匹配一次或零次)序列:
    • #- 文字哈希符号
    • \d{2,5}- 2 到 5 位数字(您的phoneRegexExtension
  • $- 字符串结束。

phoneRegexWithPlusphoneRegexWithZero被第一个强制部分覆盖,该部分匹配\+?(?:00)?\d{12}12 到 14 位数字,开头有一个可选的加号。

注意:正则表达式已根据您提供的示例输入进行调整。如果不同,请调整限制量词{12}(可以替换为,例如,{9,14}匹配 9 到 14 次出现的量化模式)。

于 2016-07-08T14:04:39.393 回答