[英]Regex & Phone Numbers
所以我一直在努力创建一个正则表达式来验证以下格式的电话号码 XXX-XXX-XXXX 到目前为止效果很好,但现在我想弄清楚如何删除输入特定数字的能力,比如“123-456-7890”。
我目前的正则表达式是
(^[0-9]{3}-[0-9]{3}-[0-9]{4}$)
我已经研究了几天,但我似乎无法弄清楚要在我当前的表达式中添加什么以获得“格式为 XXX-XXX-XXXX 但不是 123-456-7890 的任何数字”
谁能帮我这个?
太感谢了
如果您正在运行的任何版本都支持负面前瞻,那么这应该有效:
(^(?!123-456-7890)[0-9]{3}-[0-9]{3}-[0-9]{4}$)
它与您使用的表达式相同,只是在开头添加了否定的前瞻性。
(?!123-456-7890)
检查前面的字符序列是否与模式“123-456-7890”不匹配。
只有满足此条件,才会考虑模式的 rest。
同样可以通过使用后视表达式(?<!123-456-7890)
在匹配模式后进行检查来完成
(^[0-9]{3}-[0-9]{3}-[0-9]{4}(?<!123-456-7890)$)
如果这对您来说更快或更实用。
为简单起见,我会将它们分成 2 个正则表达式,您可以对不匹配项使用交替,如下所示:
var regexToMatch = new Regex("(^[0-9]{3}-[0-9]{3}-[0-9]{4}$)");
var regexToNotMatch = new Regex("(123-456-7890)|(098-765-4321)");
var testString = "123-456-7890";
if(regexToMatch.IsMatch(testString) && !regexToNotMatch.IsMatch(testString))
{
Console.WriteLine("Valid!");
}
else
{
Console.WriteLine("Not Valid!");
}
这是它的工作小提琴。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.