使用国家/地区代码验证电话前缀:IF与RegEx

时间:2012-08-08 15:01:15

标签: php

  

可能重复:
  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,例如......

2 个答案:

答案 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
}

那只是更短的