发布正则表达式以验证尼日利亚 phone 编号系统

Issue with a regex to validate the Nigerian phone numbering system

我正在研究一个正则表达式来匹配这组数字:

xxxx xxx xxxx
01 xxx xxxx
+234 1 xxx xxxx
xxxx-xxx-xxxx
xxxxxxxxxxx
234 xxx xxx xxxx
234(xxx)xxx-xxxx
234(xxx)xxx xxxx
+234(xxx)xxx xxxx
+234(xxx) xxx xxxx
+234(xxx)xxx-xxxx
234xxxxxxxxxx
+234xxxxxxxxxx

规则是:

这是为了验证尼日利亚的 phone 编号系统。找了很久都没有找到好的解决方法。

我有这样的表达:

/^(\+)?234[0-9]*?.*/gm

但是没有(234)的就不能正常匹配

具体来说:

xxxx xxx xxxx
01 xxx xxxx
xxxx-xxx-xxxx
xxxxxxxxxxx

我怎样才能完成这项工作?我对正则表达式有点陌生,希望能得到任何帮助。

Demo

简单如:

$output = trim(filter_var($input, FILTER_SANITIZE_NUMBER_INT), '+');  

您将只剩下数字。现在您可能想要删除几个可选的开始:

$output = preg_replace('/^0|^01|^234|^2341/', '', $input);

最后你可能想检查长度是否有效。

这不会使“+234(123) (456) 7890”这样的数字无效,但是应该吗?毕竟只能拨号码。

你可以使用

^(?:(?:(?:\+?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4})(?:\W*\d{3})?\W*\d{4}$

参见regex demo详情:

  • ^ - 字符串的开头
  • (?:(?:(?:\+?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4}):
    • (?:(?:\+?234(?:\h1)?|01)\h*)? - 可选的出现
      • (?:\+?234(?:\h1)?|01) - 可选的 +,然后是可选的 234,后跟水平空格和 1,或 01
      • \h* - 零个或多个水平空格
    • (?:\(\d{3}\)|\d{3})| - (, 三位数, ) 或三位数, 或
    • \d{4} - 四位数
  • (?:\W*\d{3})? - 零个或多个非单词字符的可选序列,然后是 3 个数字
  • \W* - 零个或多个非单词字符
  • \d{4} - 四位数
  • $ - 字符串结尾。

要匹配较长字符串中任意位置的 phone 数字,请使用

(?:(?:(?:\+?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4})(?:\W*\d{3})?\W*\d{4}(?!\d)

参见regex demo