正则表达式:检测用短划线(-)和/或空格分隔的电话号码

时间:2019-01-02 16:31:51

标签: regex

我正在尝试识别以下类型的电话号码输入:

  1. 0172665476
  2. +6265476393
  3. + 62-65476393
  4. + 62-654-76393
  5. +62 65476393

虽然我的正则表达式:(?:\d+\s*)+可以识别第一个2个样本值,但它会将最后3个样本值识别为每一行中的多个匹配项,而不是识别整个数字。

如何修改它以支持多个破折号和/或空格,并且仍将其识别为1个整数而不是多个匹配项?

4 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式:

^\+?\d+(?:[\s-]\d+)*\b

RegEx详细信息:

  • ^\+?:在开始时匹配可选的+
  • \d+:匹配1个以上的数字
  • (?:[\s-]\d+)*:匹配0个或多个以空格或-开头且后跟1+个数字的组
  • $:结尾(由单词边界替换,就好像有尾随空格,该匹配项将丢失。)

答案 1 :(得分:1)

这应该有效:

(?:[\d +-]+)+

答案 2 :(得分:1)

这将根据您的要求工作(如果有尾随空格,则此正则表达式将忽略。)

正则表达式:'^(?:[\ d +-] +)\ b'

答案 3 :(得分:1)

另一种选择是使用alternation来匹配10个没有前导加号的数字,或者使用+来匹配模式,并使用可选的空格或连字符:

(?:\d{10}|\+\d{2}[- ]?\d{3}-?\d{5})\b

这将匹配:

  • (?:非捕获组
    • \d{10}匹配10位数字
    • |
    • \+\d{2}[-\s]?\d{3}-?\d{5}匹配+,2位数字,可选的空格字符或-,3位数字,可选-,5位数字
  • )\b关闭非捕获组和单词边界

Regex demo

如果您的语言支持否定性回首,则可以在(?<!\S)之前加前缀,以检查之前的字符不是非空格字符。