首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex验证尼日利亚电话号码系统

使用regex验证尼日利亚电话号码系统
EN

Stack Overflow用户
提问于 2021-12-01 10:04:41
回答 2查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
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

这些规则是:

  • 最多11位长(任意数字组合,不包括静态部分)
  • 任择(234)或(+234)
  • 任择1或01或234 1
  • 可选的括号,如上文所述。

这是为了验证尼日利亚的电话号码系统。我找了很远很远的地方,到目前为止还没有找到任何好的解决方案。

我有这样的表达:

代码语言:javascript
复制
/^(\+)?234[0-9]*?.*/gm

但它并不能与没有(234)的完全匹配。

具体地说:

代码语言:javascript
复制
xxxx xxx xxxx
01 xxx xxxx
xxxx-xxx-xxxx
xxxxxxxxxxx

我怎么才能把这事做好?我对雷吉斯有点陌生,希望能得到任何帮助。

演示

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-01 12:07:03

您可以使用

代码语言:javascript
复制
^(?:(?:(?:\+?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4})(?:\W*\d{3})?\W*\d{4}$

regex演示。详细信息

  • ^ -字符串的开始
  • (?:(?:(?:\+?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4})
    • (?:(?:\+?234(?:\h1)?|01)\h*)? -可选的出现
      • (?:\+?234(?:\h1)?|01) -一个可选的+,然后是234选项,后面跟着水平空格和1,或01
      • \h* --零或多个水平空白空间

代码语言:javascript
复制
- `(?:\(\d{3}\)|\d{3})|` - `(`, three digits, `)` or three digits, or
- `\d{4}`  - four digits
  • (?:\W*\d{3})? -一个可选的零或多个非字字符序列,然后是3位数字。
  • \W* -零或多个非字字符
  • \d{4} -四位数
  • $ -字符串的末端。

若要在较长字符串中的任何位置匹配电话号码,请使用

代码语言:javascript
复制
(?:(?:(?:\+?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4})(?:\W*\d{3})?\W*\d{4}(?!\d)

regex演示

票数 3
EN

Stack Overflow用户

发布于 2021-12-01 10:20:16

简单的东西,如:

代码语言:javascript
复制
$output = trim(filter_var($input, FILTER_SANITIZE_NUMBER_INT), '+');  

您将只剩下数字。现在,您可能要删除几个可选的启动:

代码语言:javascript
复制
$output = preg_replace('/^0|^01|^234|^2341/', '', $input);

最后,您可能需要检查长度是否有效。

这并不会使'+234(123) (456) 7890‘这样的数字失效,但它应该这样做吗?毕竟,你只能拨号码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70182264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档