如何创建自定义电话号码正则表达式

时间:2013-12-27 11:18:20

标签: php regex

我正在使用php并从我的国家/地区电话号码中搜索正确的正则表达式。 我对正则表达式并不擅长,但我对我国家电话号码的可能模式进行了一些研究,其中包括:

  • 71 252 254
  • 75 89 95 52
  • +216 12 21 47 58
  • 00216 12 54 11 25
  • +216 12 789 541
  • 00216 71 245 852

请帮我节省一天的时间!!

4 个答案:

答案 0 :(得分:3)

假设您删除了所有空格(可能还有其他无效字符):

((\+|00)216)?[0-9]{8}

此正则表达式应与所有提供的示例匹配。

<强>更新

这是“完整的”正则表达式。它基于a Wikipedia article

((\+|00)216)?(74|71|78|70|72|9|4|2|5|73|75|76|77|79)[0-9]{6}

我不知道如何处理单位数区号,或许以下正则表达式更好:

((\+|00)216)?(74|71|78|70|72|09|04|02|05|73|75|76|77|79)[0-9]{6}

更新2:

最终解决方案,这一次基于another document

((\+|00)216)?([2579][0-9]{7}|(3[012]|4[01]|8[0128])[0-9]{6}|42[16][0-9]{5})

答案 1 :(得分:0)

您可以使用:

 if(preg_match(((\+|00)216)?[0-9]{8})) {
      // do something
    }

或尝试以下操作:

if (!preg_match('/^\+\d+$/', $phone)) 
    fail("Invalid phone number");

答案 2 :(得分:0)

电话号码的一般规则很容易忽略空格和破折号。之后,您可以计算最小和最大位数以及可选的加号。

$filteredPhone = preg_replace('/[^\+\d]/', '', $phone);
$phoneFormatOk = preg_match('/^(\+?0*216)?\d{8}$/', $filteredPhone);

答案 3 :(得分:0)

如果你不习惯,请尝试使用此验证器symfony https://github.com/haithem-rihane/sfValidatorTnPhone

  

/ ^((+ | 00)216)([2579] [0-9] {7} |?(3- [012] | 4 [01] | 8 [0128])[0-9] {6 } | 42 [16] [0-9] {5})$ /