Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式电话验证_Php_Regex_Validation_Phone Number - Fatal编程技术网

Php 正则表达式电话验证

Php 正则表达式电话验证,php,regex,validation,phone-number,Php,Regex,Validation,Phone Number,我创建了一个reg Exp,它基本上允许我喜欢的所有格式。但是,()仍然有一个小问题 这将是有效的:(+356-123 456 78,但是它不应该……对于+356相同)-123 456 78 有人知道如何确保模式同时包含()或不包含?首先,请注意,不能编写检查平衡括号的正则表达式。如果只允许一对括号,可以创建正则表达式以确保它们都存在,或者两者都不存在。但是,如果您想允许任意数量的括号,但只能成对使用,则正则表达式的功能不足以完成这项工作;您需要一个实际的解析器 就个人而言,我只会去掉电话号码中

我创建了一个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)?匿名递归?无论如何,一旦你有了这样的东西,它就不再是真正的“正则表达式”。谢谢你,这就是我要找的!谢谢,这就是我要找的!