Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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 Regex验证并更正电话号码_Php_Regex - Fatal编程技术网

Php Regex验证并更正电话号码

Php Regex验证并更正电话号码,php,regex,Php,Regex,目前,我正在使用此版本的代码验证和更正给定的电话号码: function validateTelephoneNumber($parameters){ $validTel = "<^((\\+|00)[1-9]\\d{0,3}|0 ?[1-9]|\\(00? ?[1-9][\\d ]*\\))[\\d\\-/ ]*$>"; $telNumber = $parameters; if (preg_match($validTel, $

目前,我正在使用此版本的代码验证和更正给定的电话号码:

function validateTelephoneNumber($parameters){
    
    $validTel = "<^((\\+|00)[1-9]\\d{0,3}|0 ?[1-9]|\\(00? ?[1-9][\\d ]*\\))[\\d\\-/ ]*$>";

    $telNumber = $parameters;

    if (preg_match($validTel, $telNumber)) {
        $telNumber = preg_replace("<^\\+>", "00", $telNumber);
        $telNumber = preg_replace("<\\D+>", "", $telNumber);
    }
    return $telNumber;
}

你能帮忙吗?谢谢

电话号码的转换(验证后)可以分三步完成

步骤1:如果没有国家代码,则将前导零替换为
“43”

如果字符串正好包含一个正斜杠或以左括号开头,我假设没有国家代码。要添加defautlt国家/地区代码,我们可以将以下正则表达式的匹配项替换为
“43”

。PHP的正则表达式引擎执行以下操作:

^              : assert beginning of string
(?:            : begin non-capture group
  \(0*         : match '(' followed by 0+ zeroes
  |            : or
  0*           : match 0+ zeros
  (?=          : begin positive lookahead
    \d+\/\d+   : match 1+ digits, '/', 0+ digits
    $          : assert end of string  
  )            : end positive lookahead
)              : end non-capture group
^          : assert beginning of string
0+         : match 1+ zeroes
|          : or
[ +\/()-]  : match one character in the character class
这将转换字符串

0043/2342/213412-1234
+43234 2312341234 12
07234/32434
(0677)32423434
0049 171 12341234
0031 9872 12341234
0043(07234)1234-1234

步骤2:删除不需要的字符

对于这一步,我们用空字符串替换以下正则表达式的匹配项

^0+|[ +\/()-]
。PHP的正则表达式引擎执行以下操作:

^              : assert beginning of string
(?:            : begin non-capture group
  \(0*         : match '(' followed by 0+ zeroes
  |            : or
  0*           : match 0+ zeros
  (?=          : begin positive lookahead
    \d+\/\d+   : match 1+ digits, '/', 0+ digits
    $          : assert end of string  
  )            : end positive lookahead
)              : end non-capture group
^          : assert beginning of string
0+         : match 1+ zeroes
|          : or
[ +\/()-]  : match one character in the character class
这将把步骤1中获得的字符串转换为以下内容

4323422134121234
43234231234123412
43723432434
4367732423434
4917112341234
31987212341234
430723412341234
步骤3:将
'+'
添加到字符串开头

这是最容易用PHP语句完成的,它生成以下字符串

+4323422134121234
+43234231234123412
+43723432434
+4367732423434
+4917112341234
+31987212341234
+430723412341234

@卡里·斯沃兰:是的,这是个好主意,但是,下面的数字并没有按照希望的那样更正。。0049 171 12341234,0031 9872 12341234,0043(07234)1234-1234我误解了问题的一个方面。我已经修改了我的答案。请注意,在我的“步骤1”中,我关于如何确定字符串是否不包含国家代码的假设可能不正确,因为问题中没有明确的标准。@cary\u swoveland Hy,我尝试了以下php代码:“``函数validateTelephoneNumber($parameters){$validTel=“([\d\(\)\s\.-\d]{4,}\d)”;$telNumber=$parameters;if(preg_match($validTel,$telNumber)){$telNumber=preg_replace(“^(?:\(0*| 0*(?=\d+\/\d+$)”,“43”,$telNumber);$telNumber=preg_replace(“^0+\[+\/()-]”,“,“,$telNumber”);$telNumber=”+。$telNumber;}返回$telNumber;}“``但它并没有如你所愿工作。我不懂PHP,所以我不能帮你,但也许其他读者可以。有什么规则告诉你,
0043/2342/213412-1234
中的
43
是国家代码,而
07234/32434
中的
72
不是国家代码?以后请在一个国家代码中显示示例中使用的数据m这使得读者可以很容易地剪切和粘贴以测试他们的答案。这里只需要表格的第一列就可以了。将其与其他列分开并不困难。如果您单独显示第一列,然后分别显示所需的结果,则会更容易。
+4323422134121234
+43234231234123412
+43723432434
+4367732423434
+4917112341234
+31987212341234
+430723412341234