我正在使用php并从我的国家/地区电话号码中搜索正确的正则表达式。 我对正则表达式并不擅长,但我对我国家电话号码的可能模式进行了一些研究,其中包括:
请帮我节省一天的时间!!
答案 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})$ /