Javascript到PHP的转换

时间:2015-06-30 19:58:08

标签: javascript php

我有一个libphonenumber包的javascript端口,它具有以下功能:

function cleanPhone(a){
    a=a.replace(/[^\d\+]/g,"");
    return a="+"==a.substr(0,1)?"+"+a.replace(/[^\d]/g,""):a.replace(/[^\d]/g,"")
}

我正在尝试将此函数转换为PHP,并且想知道这是否正确:

function cleanPhone($a) {
    $a = preg_replace('/[^\d\+]/g',"", $a);
    return $a = "+" == substr(0,1)?"+"+ preg_replace('/[^\d]/g',"", $a) : preg_replace('/[^\d]/g',"", $a);
}

1 个答案:

答案 0 :(得分:1)

  

g不是PCRE中的有效修饰符(PHP使用的正则表达式实现)   因为它根本不需要; preg_replace()将执行全局   默认情况下替换。你会在真正的Perl正则表达式中找到修饰符   以及JavaScript正则表达式,但不在PCRE中。

我会写得更清楚:

function cleanPhone($a) {
    $a = preg_replace('/[^\d\+]/', "", $a);
    if(substr($a, 0, 1) == "+"){
       return "+" + preg_replace('/[^\d]/', "", $a); 
    }else{
      return preg_replace('/[^\d]/',"", $a);
    }
}

另请注意,您缺少子字符串方法substr($string, $startIndex, [$length])

的变量标识符

使用ternary operator的缩小版本也应该有效:

function cleanPhone($a) {
    $a = preg_replace('/[^\d\+]/',"", $a);
    return ("+" == substr($a,0,1))?"+"+ preg_replace('/[^\d]/',"", $a) : preg_replace('/[^\d]/',"", $a);
}