【发布时间】:2013-07-10 02:26:50
【问题描述】:
我有一个正则表达式,我将使用它来验证输入的号码是否采用标准的美国电话格式(即 (###) ###-####)。我是正则表达式的新手,但在弄清楚每个字符的确切功能时仍然遇到了一些麻烦。如果有人会逐个阅读/验证我的理解,我将非常感激。另外,如果正则表达式是错误的,我显然很想知道。
\D*?(\d\D*?){10}
我认为正在发生的事情:
\D*?( 表示括号元字符的转义序列...不确定为什么 \D*? 是必要的
\d 表示数字
\D*?表示有一个非数字字符 (-) 后跟右括号。
{10} 表示 10 位数字
我感到非常不确定如何解释这一点,就像我对正则表达式为何按其顺序等方面的理解非常模糊。在此先感谢您的帮助/解释。
编辑
这似乎不是我想要的最好的正则表达式。另一种可能性是 [(][0-9]{3}[)] [0-9]{3}-[0-9]{4},但有人告诉我这会失败。我想我需要对正则表达式做更多的工作来解决这个问题。
【问题讨论】:
-
This 可能会有所帮助。
-
这是满足您要求的非常广泛的正则表达式 - 它匹配各种输入 - 例如
a5bcdefgh55a55c5d5g5!5q5将匹配。简单来说,它只需要一个字符串中的 10 个数字 - 也就是说,输入可以在数字之间以及字符串的开头和结尾包含任意数量(包括 0)的随机字符。将此添加为评论,因为这里的答案确实应该是解决问题的更好方法。 -
@500-InternalServerError: 哇,debuggex 太棒了。感谢您链接到它。 OP:你可以试试这样的表达方式:debuggex.com/r/MSYZS_GBTT3UdNM9/0
-
同意 debuggex 非常有用。我想出了 (\d{3})\d{3}[-]\d{4}$ 这似乎工作正常。
标签: regex