我创建了一个 reg Exp,它基本上允许我喜欢它允许的所有格式。但是,()仍然存在一个小问题......
^\(?(\+?\d+)?\)? ?\d*(-?\d{2,3} ?){0,4}$
这将是有效的:(+356-123 456 78,但它不应该......对于 +356 相同)-123 456 78。
任何人都知道如何确保模式同时包含 () 或不包含?
我创建了一个 reg Exp,它基本上允许我喜欢它允许的所有格式。但是,()仍然存在一个小问题......
^\(?(\+?\d+)?\)? ?\d*(-?\d{2,3} ?){0,4}$
这将是有效的:(+356-123 456 78,但它不应该......对于 +356 相同)-123 456 78。
任何人都知道如何确保模式同时包含 () 或不包含?
首先,请注意您不能编写检查平衡括号的正则表达式。如果您只想允许一对括号,您可以制作一个正则表达式以确保它们要么都存在,要么都不存在。但是,如果您想允许任意数量的括号,但只能成对出现,那么正则表达式就不足以完成这项工作;你需要一个实际的解析器。
就个人而言,我只会去掉除数字、空格和+
符号之外的任何电话号码。这是 ITU-T 标准 E.123 推荐的国际表示法,无需担心括号。
试试这个:
^(?:\((\+?\d+)?\)|\+?\d+) ?\d*(-?\d{2,3} ?){0,4}$
它允许区号具有带括号或不带括号的区号。
处理此问题的最简单方法是去除非数字并规范化电话号码字段中的空格。十个人在电话号码字段中输入许多愚蠢的格式。我建议一个两步的过程:
// 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!
}