C# 用于向电话号码添加特殊字符的正则表达式
我添加了以下用于验证移动电话号码的正则表达式:C# 用于向电话号码添加特殊字符的正则表达式,c#,regex,validation,C#,Regex,Validation,我添加了以下用于验证移动电话号码的正则表达式: (^07[1,2,3,4,5,7,8,9][0-9]{7,8}$) 我想允许用户也输入一个#字符,但我不确定该字符的位置。他们可能需要在拨完号码后输入#字符,或者在号码的开头输入直拨号码或分机。首先,您当前的正则表达式也与格式为0712345678的“数字”匹配。因此,您需要将[1,2,3,4,5,7,8,9]更改为[1-9](当字符类中两个字符之间存在-时,通常意味着存在一个范围) 如果要接受可选的#字符,可以使用?量词,表示0或1次 ^#?0
(^07[1,2,3,4,5,7,8,9][0-9]{7,8}$)
我想允许用户也输入一个
#
字符,但我不确定该字符的位置。他们可能需要在拨完号码后输入#
字符,或者在号码的开头输入直拨号码或分机。首先,您当前的正则表达式也与格式为0712345678
的“数字”匹配。因此,您需要将[1,2,3,4,5,7,8,9]
更改为[1-9]
(当字符类中两个字符之间存在-
时,通常意味着存在一个范围)
如果要接受可选的#
字符,可以使用?
量词,表示0或1次
^#?07[1-9][0-9]{7,8}#?$
除此之外,正如您在演示中看到的,它还将使用两个哈希匹配数字;一个在前面,一个在后面。避免这种情况的一个选择是使用一些条件(C#可以支持)
(?(1)|#?)
基本上意味着如果第一个散列被匹配,那么就不应该再匹配任何内容。否则,如果最初没有匹配任何哈希,那么它可以匹配一个哈希(如果在数字的末尾有一个)
在C#中,有点像这样:
Regex.Match(myString, @"^(#)?07[1-9][0-9]{7,8}(?(1)|#?)$");
或者,您可以使用负前瞻来确保数字中的哈希值不超过一个:
^(?!.*#.*#.*$)#?07[1-9][0-9]{7,8}#?$
所以你的电话号码也接受
,
!(^07[1,2,3,4,5,7,8,9 |#][0-9 |#]{7,8}$)?我正在使用c语言,两个都接受11或12个数字,但是仍然不允许使用[1-9]而不是[1,2,3,4,5,7,8,9]?这是处理只出现一次的好方法。
^(?!.*#.*#.*$)#?07[1-9][0-9]{7,8}#?$