C# 电话号码中的Regex可选空白
可能重复:C# 电话号码中的Regex可选空白,c#,regex,C#,Regex,可能重复: 我非常接近我需要的完整正则表达式。然而,我似乎不能得到一个可选的空白允许 正则表达式 要求-仅这四项 111-111-1111-工程 (111)111-1111-工程 (111)111-111-不捕获 1111-工程 如何在括号后添加可选空格 ^(\(?\d{3}\)*\s?\-?\d{3}\-?\d{4})$ *\s表示0或1个空白字符 编辑: 事实上,我更喜欢这个版本,因为它允许破折号或空格,但不能两者都允许。还有?表示0或1,*表示0或更多: ^(\(?\d{3}\)?[\
我非常接近我需要的完整正则表达式。然而,我似乎不能得到一个可选的空白允许 正则表达式 要求-仅这四项 111-111-1111-工程 (111)111-1111-工程 (111)111-111-不捕获 1111-工程 如何在括号后添加可选空格
^(\(?\d{3}\)*\s?\-?\d{3}\-?\d{4})$
*\s表示0或1个空白字符
编辑:
事实上,我更喜欢这个版本,因为它允许破折号或空格,但不能两者都允许。还有?表示0或1,*表示0或更多:
^(\(?\d{3}\)?[\s,\-]?\d{3}\-?\d{4})$
那么,与3334445555
,333.444.5555
,333-444-5555
,333-444-5555
,333-444-5555
,333-444-5555
,333-444-5555
,333-444-5555
,匹配的呢
更新
您遇到了REGEX的局限性,因此丑陋的解决方案实际上是:
(\d{3}-\d{3}-\d{4}|\(\d{3}\)\s?\d{3}-\d{4}|\d{10})
我不会根据格式处理正则表达式,而是根据输入的数字。此问题显示了您可能应该采用的答案:
有时最好匹配三个完整表达式中的一个:
^(\d{11}{124;(\ d{3}-{2}\d4}\(\d{3}\)?\d\d-\d\d\d)$
我不能允许所有其他组合。就我列出的那些。我认为这是不可能的,因为你想在破折号的同一个地方留一个空间,但前提是它在a)之后,这也需要回顾另一个(.你发布的第二个帖子似乎效果不错。你为什么这么反对它呢?说到底,就是说试试这个,如果不起作用,试试这个,如果不起作用,试试这个……我个人的偏好是减少任何需要多次测试才能找到匹配项的东西的复杂性(不管实际使用、正则表达式、枚举覆盖反射等)这是否会改变为在javascript中使用?ex:var re=new RegExp((\d{3}-\d{3}-\d{4}|(\d{3})\s?\d{3}-\d{4}\d{124; 10});valid=re.test(值);当使用它时,仍然无法捕获括号后有空格的字符?奇怪。我刚刚尝试了它,它在您的链接中起作用。这是我最初使用的工具:是的,我只是重新键入了它们,并且起了作用。非常奇怪,我不确定第一次发生了什么。我通常做的是去掉非数字字符,并确保长度是10。然后,我将10位字符串的格式设置为我认为应该在数据库中的格式。我必须遵守为显示的4种格式提供的严格规则。跳过括号?将括号括起来?为什么?对不起,但对我来说,这是一个丑陋的正则表达式。以下是我的版本:/^[(]?\d{3}[)]?[-\s]?\d{3}-?\d{4}$/
。您想要的部分是右括号后面的[-\s]?
,而不是\-?
,在那里连字符无论如何都不需要转义。
(\d{3}-\d{3}-\d{4}|\(\d{3}\)\s?\d{3}-\d{4}|\d{10})