用于向电话号码添加特殊字符的正则表达式

时间:2014-03-04 11:23:15

标签: c# regex validation

我添加了以下正则表达式来验证手机号码:

(^07[1,2,3,4,5,7,8,9][0-9]{7,8}$)

我想允许用户输入#字符,但我不确定在哪里填写。他们可能需要在拨打号码后输入#字符,或者在号码的开头拨打直拨号码或分机号。

1 个答案:

答案 0 :(得分:2)

首先,您当前的正则表达式也匹配格式07,12345678的“数字”。因此,您需要将[1,2,3,4,5,7,8,9]更改为[1-9](当您在字符类中的两个字符之间有-时,通常意味着有一个范围)

如果您想接受可选的#字符,可以使用?量词,这意味着0或1次。

^#?07[1-9][0-9]{7,8}#?$

regex101 demo

除此之外,正如您在演示中所看到的,它还将匹配带有两个哈希值的数字;一个在前面,一个在最后。避免这种情况的一个选择是使用一些条件(C#可以支持)。

^(#)?07[1-9][0-9]{7,8}(?(1)|#?)$

regex101 demo

(?(1)|#?)基本上意味着如果第一个哈希匹配,那么就不应该匹配任何东西了。否则,如果最初没有匹配哈希,那么它可以匹配哈希,如果在数字的末尾有一个哈希。

在C#中,它有点像这样:

Regex.Match(myString, @"^(#)?07[1-9][0-9]{7,8}(?(1)|#?)$");

或者您可以使用否定前瞻来确保数字中不会有多个哈希:

^(?!.*#.*#.*$)#?07[1-9][0-9]{7,8}#?$