我添加了以下正则表达式来验证手机号码:
(^07[1,2,3,4,5,7,8,9][0-9]{7,8}$)
我想允许用户输入#
字符,但我不确定在哪里填写。他们可能需要在拨打号码后输入#
字符,或者在号码的开头拨打直拨号码或分机号。
答案 0 :(得分:2)
首先,您当前的正则表达式也匹配格式07,12345678
的“数字”。因此,您需要将[1,2,3,4,5,7,8,9]
更改为[1-9]
(当您在字符类中的两个字符之间有-
时,通常意味着有一个范围)
如果您想接受可选的#
字符,可以使用?
量词,这意味着0或1次。
^#?07[1-9][0-9]{7,8}#?$
除此之外,正如您在演示中所看到的,它还将匹配带有两个哈希值的数字;一个在前面,一个在最后。避免这种情况的一个选择是使用一些条件(C#可以支持)。
^(#)?07[1-9][0-9]{7,8}(?(1)|#?)$
(?(1)|#?)
基本上意味着如果第一个哈希匹配,那么就不应该匹配任何东西了。否则,如果最初没有匹配哈希,那么它可以匹配哈希,如果在数字的末尾有一个哈希。
在C#中,它有点像这样:
Regex.Match(myString, @"^(#)?07[1-9][0-9]{7,8}(?(1)|#?)$");
或者您可以使用否定前瞻来确保数字中不会有多个哈希:
^(?!.*#.*#.*$)#?07[1-9][0-9]{7,8}#?$