正则表达式手机验证

时间:2012-05-04 00:33:13

标签: php regex validation phone-number

我创建了一个reg Exp,它基本上允许我喜欢的所有格式允许。但是,()...

仍然存在一些问题
^\(?(\+?\d+)?\)? ?\d*(-?\d{2,3} ?){0,4}$

这是有效的:(+ 356-123 456 78,但它不应该...... +356相同)-123 456 78.

任何人都知道如何确保模式包含()或不包含?

3 个答案:

答案 0 :(得分:3)

首先,请注意您不能编写检查平衡括号的正则表达式。如果你只想允许一对括号,你可以制作一个正则表达式,以确保它们既可以存在,也可以不存在。但是如果你想允许任意数量的括号,但只能成对使用,那么正则表达式就不足以完成这项工作;你需要一个真正的解析器。

就个人而言,我只会删除除数字,空格和+符号之外的任何内容的电话号码。这是ITU-T标准E.123推荐的国际符号,无需担心括号。

答案 1 :(得分:2)

试试这个:

^(?:\((\+?\d+)?\)|\+?\d+) ?\d*(-?\d{2,3} ?){0,4}$

它允许区号具有带括号或不带括号的区号。

答案 2 :(得分:0)

处理此问题的最简单方法是删除非数字并规范电话号码字段中的空格。人们可以输入许多愚蠢的电话号码字段格式。我建议采用两个步骤:

// Strip non-numbers and whitespace
var cleanPhone = phoneNumber.replace( /[^0-9\s]/, "" );

// All whitespace are now single spaces
cleanPhone = cleanPhone.replace( /\s+/, " " );

if( cleanPhone.match(/* place your (now simple) validation regex here */) ) {
    // Valid!
}