可能重复:
PHP regex for Lebanese phone number
preg_replace to mask parts of a phone number
在我的国家/地区,电话号码前缀有3种可能性输入:+ 62,62和0。
例如:
+622112345,622112345和02112345
现在,问题是......我想以1种格式存储电话号码,即:0xxxx。意味着,任何电话前缀都将转换为0xxxx格式。
输入:+622112345,输出:02112345
输入:622112345,输出:02112345
输入:02112345,输出:02112345
我认为通过使用substr()函数和IF将解决这种情况:
$Prefix = substr($Number, 0, 2);
if ($Prefix = "+6"){
//some code to convert +62 into 0
}else if ($Prefix = "62"){
//some code to convert 62 into 0
}else{
//nothing to do, because it's already 0
}
除了使用IF之外,有没有其他方法可以做到这一点?使用RegEx,例如......
答案 0 :(得分:2)
是的,在单个正则表达式中这更容易:
preg_match( '/(0|\+?\d{2})(\d{7,8})/', $input, $matches);
echo $matches[1] . ' is the extension.' . "\n";
echo $matches[2] . ' is the phone number.' . "\n";
这将从任一输入中捕获分机号码和电话号码。但是,对于您的特定情况,我们可以创建一个测试平台并使用preg_replace()
来获取所需的输出字符串:
$tests = array( '+622112345' => '02112345', '622112345' => '02112345', '02112345' => '02112345');
foreach( $tests as $test => $desired_output) {
$output = preg_replace( '/(0|\+?\d{2})(\d{7,8})/', '0$2', $test);
echo "Does $output match $desired_output? " . ((strcmp( $output, $desired_output) === 0) ? "Yes" : "No") . "\n";
}
您可以从the demo看到这为所有测试用例正确创建了正确的$output
字符串。
答案 1 :(得分:0)
if (preg_match('[^\+62|62]', $your_phone_number)) {
# if string contains +62 or 62 do something with this number
} else {
# do nothing because string doesn't contain +62 or 62
}
那只是更短的