Php 正则表达式电话验证
我创建了一个reg Exp,它基本上允许我喜欢的所有格式。但是,()仍然有一个小问题 这将是有效的:(+356-123 456 78,但是它不应该……对于+356相同)-123 456 78Php 正则表达式电话验证,php,regex,validation,phone-number,Php,Regex,Validation,Phone Number,我创建了一个reg Exp,它基本上允许我喜欢的所有格式。但是,()仍然有一个小问题 这将是有效的:(+356-123 456 78,但是它不应该……对于+356相同)-123 456 78 有人知道如何确保模式同时包含()或不包含?首先,请注意,不能编写检查平衡括号的正则表达式。如果只允许一对括号,可以创建正则表达式以确保它们都存在,或者两者都不存在。但是,如果您想允许任意数量的括号,但只能成对使用,则正则表达式的功能不足以完成这项工作;您需要一个实际的解析器 就个人而言,我只会去掉电话号码中
有人知道如何确保模式同时包含()或不包含?首先,请注意,不能编写检查平衡括号的正则表达式。如果只允许一对括号,可以创建正则表达式以确保它们都存在,或者两者都不存在。但是,如果您想允许任意数量的括号,但只能成对使用,则正则表达式的功能不足以完成这项工作;您需要一个实际的解析器
就个人而言,我只会去掉电话号码中的数字、空格和
+
符号。这是ITU-T标准E.123推荐的国际符号,它消除了对括号的担忧。首先,请注意,不能编写检查平衡括号的正则表达式。如果只允许一对括号,可以创建正则表达式以确保它们都存在,或者两者都不存在。但是,如果您想允许任意数量的括号,但只能成对使用,则正则表达式的功能不足以完成这项工作;您需要一个实际的解析器
就个人而言,我只会去掉电话号码中的数字、空格和+
符号。这是ITU-T标准E.123推荐的国际符号,它消除了对括号的担忧。试试这个:
^(?:\((\+?\d+)?\)|\+?\d+) ?\d*(-?\d{2,3} ?){0,4}$
它允许区号中包含带括号的区号或不包含括号的区号。请尝试以下操作:
^(?:\((\+?\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!
}
处理这一问题的最简单方法是去除非数字,并规范化电话号码字段中的空白。人们需要输入许多愚蠢的电话号码字段格式。我建议采用两步流程:
// 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!
}
你可以用反引用之类的方法来做,但是值得这么麻烦吗?“你不能编写一个检查平衡括号的正则表达式”-例如
\((?R)*\)
什么是(?R)?匿名递归?在任何情况下,一旦你有了这样的东西,它就不再是一个真正的“正则表达式”。你可以用反引用之类的方法来实现它,但是值得这么麻烦吗?“你不能编写一个检查平衡括号的正则表达式”-例如\(?R)*\)
什么是(?R)?匿名递归?无论如何,一旦你有了这样的东西,它就不再是真正的“正则表达式”。谢谢你,这就是我要找的!谢谢,这就是我要找的!