我有一个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);
}
答案 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);
}