为什么我的 Regex 没有检测到以特定模式书写的 phone 数字?
Why my Regex is not detecting phone numbers written in certain patterns?
我有一个正则表达式来检查文本中的 phone 个数字。请检查下面。
(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}
这个正则表达式工作正常,但如果我这样写就不能正常工作了。
- 示例 1:088 11 22 458
- 示例 2:+1 88 11 22 458
如何修改正则表达式来修复这个错误?
您可以在开头添加一个可选的 +
,允许在区号中使用两位或三位数字,并添加一个替代项以匹配两位两位数,然后在末尾添加一组三位数字:
(?:\+?\d[\s-]?)?[([\s-]{0,2}\d{2,3}[)\]\s-]{0,2}(?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3})
参见regex demo。 详情:
(?:\+?\d[\s-]?)?
- 一个可选的 一个可选的 +
,一个数字,然后是一个空格或一个连字符
[([\s-]{0,2}
- 零个、一个或两个 (
、[
、空格或连字符
\d{2,3}
- 两位或三位数
[)\]\s-]{0,2}
- 零个、一个或两个 )
、]
、空格或连字符
(?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3})
- 两者之一
\d{3}[\s-]?\d{4}
- 三位数字,一个可选的空格或 -
,四位数字
|
- 或
\d{2}[\s-]?\d{2}[\s-]?\d{3}
- 两个数字,一个可选的空格或 -
,两个数字,一个可选的空格或 -
,三个数字
您可能还考虑添加数字边界以禁止在左侧(负数 (?<!\d)
后视)和右侧(负数 (?!\d)
前视)具有其他数字的匹配项:
(?:\+?(?<!\d)\d[\s-]?)?[([\s-]{0,2}(?<!\d)\d{2,3}[)\]\s-]{0,2}(?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3})(?!\d)
参见 this regex demo。
我会使用这个正则表达式:
[\+\(\[]?\d[\(\[\s-]?\d[\s-]?\d[\)\]\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d
它允许在任何地方使用定界符。
有时 phone 数字是分隔符,这样更容易记住。
例如:
- 088 111-2-111
- (088)11-22-33-4
我有一个正则表达式来检查文本中的 phone 个数字。请检查下面。
(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}
这个正则表达式工作正常,但如果我这样写就不能正常工作了。
- 示例 1:088 11 22 458
- 示例 2:+1 88 11 22 458
如何修改正则表达式来修复这个错误?
您可以在开头添加一个可选的 +
,允许在区号中使用两位或三位数字,并添加一个替代项以匹配两位两位数,然后在末尾添加一组三位数字:
(?:\+?\d[\s-]?)?[([\s-]{0,2}\d{2,3}[)\]\s-]{0,2}(?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3})
参见regex demo。 详情:
(?:\+?\d[\s-]?)?
- 一个可选的 一个可选的+
,一个数字,然后是一个空格或一个连字符[([\s-]{0,2}
- 零个、一个或两个(
、[
、空格或连字符\d{2,3}
- 两位或三位数[)\]\s-]{0,2}
- 零个、一个或两个)
、]
、空格或连字符(?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3})
- 两者之一\d{3}[\s-]?\d{4}
- 三位数字,一个可选的空格或-
,四位数字|
- 或\d{2}[\s-]?\d{2}[\s-]?\d{3}
- 两个数字,一个可选的空格或-
,两个数字,一个可选的空格或-
,三个数字
您可能还考虑添加数字边界以禁止在左侧(负数 (?<!\d)
后视)和右侧(负数 (?!\d)
前视)具有其他数字的匹配项:
(?:\+?(?<!\d)\d[\s-]?)?[([\s-]{0,2}(?<!\d)\d{2,3}[)\]\s-]{0,2}(?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3})(?!\d)
参见 this regex demo。
我会使用这个正则表达式:
[\+\(\[]?\d[\(\[\s-]?\d[\s-]?\d[\)\]\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d
它允许在任何地方使用定界符。 有时 phone 数字是分隔符,这样更容易记住。
例如:
- 088 111-2-111
- (088)11-22-33-4