这是我目前的正则表达式:
^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9])((\s|\s?-\s?)?[0-9])([0-9])\s?[0-9]\s?[0-9]\s?[0-9]\s?[0-9]\s?[0-9]$
这些是我的测试结果:
0612345678 true
06-12345678 true
+ 31612345678 true
+ 316-12345678 true
00316-12345678 true
061234567 false
06-12-345678 false
06-asdfghjk false
0331234567 true
0345-123456 false
+ 31331234567 true
+ 3133-1234567 true
003133-1234567 true
033123456 false
010-12-34567 假
035-asdfghj false
0345-123456 false
010-1234567 true
一切似乎都没问题,但有一个:-) 字符串需要匹配 (正确的电话号码) 但 RegEx 不匹配。这是 0345-123456。任何人都可以帮助我完成 (或优化) 我的 RegEx,以便所有上述测试都可以?
谢谢你的帮助!
模式中有可选的空白字符,但在示例数据中没有空白字符。
您可以编写一个模式来匹配列出的特定格式,并且仅对于匹配,您可以省略捕获组。
请注意,0345-123456
是列表中的 2 倍。
^(?:(?:(?:\+|00)31|0)(?:\d-?\d{8}|\d\d-\d{7})|0\d{3}-\d{6})$
^
字符串的开头
(?:
非捕获组
(?:(?:\+|00)31|0)
Match either+31
or0031
or0
(?:
非捕获组
\d-?\d{8}
匹配一个数字,可选-
和 8 个数字
|
Or
\d\d-\d{7}
匹配 2 个数字-
和 7 个数字
)
关闭非捕获组
|
Or
0
匹配单个零
\d{3}-\d{6}
匹配 3 位-
6 位
)
关闭外部非捕获组
$
字符串结尾
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(57条)