0

我正在使用以下正则表达式来验证电话号码

/^(?!([^-]*-){5})(\+\d+)?\s*(\(\d+\))?[- \d]+$/gi

如果输入是假设+51 (0) 989009890它是有效的。但是当输入为0051 (0) 989009890 时。我是 REGEX 的新手,所以找不到可能的解决方案。

电话号码为以下格式时有效。

  1. 0xxxxxxxxxxx
  2. +xx xxxxxxxxxxxx
  3. +xxxxxxxxxxxx
  4. +xx (x) xxxxxxxxx
  5. 00xxxxxxxxx
  6. 00xx (x) xxxxxxxxx

这里 x 表示数字 0-9。() 中的数字限制为 3。

4

2 回答 2

2

如果您也打算接受0051 (0) 989009890,问题是 (+\d+)?旨在处理输入中括号之前的位,但它需要存在“+”。您可以通过使用“?”使其成为可选来更改它,例如:

/^(?!([^-]*-){5})(\+?\d+)?\s*(\(\d+\))?[- \d]+$/gi

或者,如果 '00xxx' 应该是 '+xxx' 的替代品(即,必须存在 '+' 或 '00' ),那么您可以使用:

/^(?!([^-]*-){5})(\+\d+|00\d+)?\s*(\(\d+\))?[- \d]+$/gi
于 2013-01-25T17:10:14.527 回答
1

我想这就是你要找的

^(?!([^-]*-){5,})(\+?\d+)?\s*(\(\d{1,3}\))?\s*[- \d]+$
于 2013-01-25T17:14:07.493 回答