我正在使用Asp.Net RegularExpressionValidator验证电话号码。
支票非常基本 - 一个数字长度可以是10或11个字符,全部是数字,从01或02开始。
这是正则表达式:
^0[12]\d{8,9}$
但是,我最近开始与第三方合作,执行更严格的规则。在我看来,这是一个坏主意 - 部分是因为他们甚至没有公布这些规则,而且它们可能会受到变化,因此可以在所有合作伙伴中进行维护。然而...
我现在需要将他们的添加内容添加到我的正则表达式中,但我不知道从哪里开始。
他们目前在OR中使用2个单独的正则表达式执行此操作,但是如果可能的话,我想在1中执行此操作。
附加语法应确保10位数的电话号码也符合这些附加规则 - 这是他们的10位数语法。
"^01(204|208|254|276|297|298|363|364|384|386|404|420|460|461|480|488|524|527|562|566|606|629|635|647|659|695|726|744|750|768|827|837|884|900|905|935|946|949|963|995)[0-9]{5}$
关于如何实现这一点的任何想法?
答案 0 :(得分:2)
免责声明:此答案基于this answer后面的逻辑来演示“虚拟”要求(我们应该放弃这些要求)。
让我解释一下发生了什么:
^0[12]\d{8,9}$
这里发生了什么?
^
:匹配行的开头0
:匹配0
[12]
:匹配1
或2
\d{8,9}
:匹配数字8或9次$
:匹配行尾 ^01(204|20...3|995)[0-9]{5}$
这个大正则表达式做了什么?
^
:匹配行的开头01
:匹配01
。(204|20...3|995)
:匹配某个3位数组合[0-9]{5}
:匹配数字5次$
:匹配行尾那么,如果我们在OR语句中合并这两个怎么办?
^
(?:
01(204|20...3|995)[0-9]{5}
)
|
(?:
0[12]\d{8,9}
)
$
我会告诉你为什么它没有意义。
0[12]\d{8,9}
匹配多少位数? 10或11对吗?
现在另一个正则表达式匹配多少位数?
01(204|20...3|995)[0-9]{5}
^^ ^-----\/-----^ ^--\/--^
2 + 3 + 5 = 10
现在,如果我们比较2个正则表达式。很明显,^0[12]\d{8,9}$
将匹配对其他正则表达式有效的所有数字。那么为什么世界上你会把这两个结合起来呢?
为了简化问题,请说你有regex1:abc
,regex2:[a-z]+
。您想要的是abc|[a-z]+
,但由于[a-z]+
与abc
匹配,因此没有意义,因此我们可以搭乘abc
。
旁注,\d
does match more比您在某些语言中的想法要多。您的最终正则表达式应为^0[12][0-9]{8,9}$
。
答案 1 :(得分:1)
您可以将它们与正则表达式中的OR合并:
^(?:01(204|208|254|276|297|298|363|364|384|386|404|420|460|461|480|488|524|527|562|566|606|629|635|647|659|695|726|744|750|768|827|837|884|900|905|935|946|949|963|995)\d{5}|0[12]\d{9})$
编辑了11位正则表达式。