我需要一个正则表达式来匹配电话号码。我只是想知道这个号码是否可能是一个电话号码,它可以是任何电话格式,美国或国际。所以我制定了一个策略来确定它是否匹配。
我希望它接受以下字符:0-9
以及,.()-
,并且可选择以+
开头(对于国际号码)。如果字符串有任何其他字符,则字符串不匹配。
我试过了:
/\+?[0-9\/\.\(\)\-]/
但它匹配数字中间有+的电话号码。它匹配包含alpha字符的数字(我不希望这样)。
最后,我想将最小长度设置为9个字符。
有什么想法吗?
感谢您的帮助,我显然对RegEx的东西不太热心:))
答案 0 :(得分:4)
嗯,你很亲密。试试这个:
^\+?[0-9\/.()-]{9,}$
如果没有开始和结束锚点,则允许部分匹配,因此它可以匹配字符串+123
中的:-)+123
。
如果您想要至少9个位数,而不是任何字符(因此---...///
无效),您可以使用:
^\+?[\/.()-]*([0-9][\/.()-]*){9,}$
或者,使用前瞻 - 在匹配[0-9/.()-]*
的字符串之前,正则表达式引擎正在查找{9}的(\D*\d){9}
,每个数字可能在其他字符之前(我们将验证)更高版本)。
^\+?(?=(\D*\d){9})[0-9\/.()-]*$
答案 1 :(得分:1)
它与alpha字符匹配的原因是因为句号。你必须逃脱它。我不知道你正在使用什么编辑器,这就是我将用于VIM的内容:
^+\?[()\-\.]\?\([0-9][\.()\-]\?\)\{3,\}$
答案 2 :(得分:0)
juqeury有一个美国手机验证插件。检查此link。您还可以在源代码中看到正则表达式。