【问题标题】:RegEx and validating telephone numbers [duplicate]正则表达式和验证电话号码 [重复]
【发布时间】:2016-04-20 15:06:59
【问题描述】:

我正在学习 RegEx,但我陷入了以下练习:

我必须匹配:

1 (555) 555-5555
5555555555
1 555-555-5555
555-555-5555

而不是:

1 555)555-5555
(6505552368)
10 (757) 622-7382
555)-555-5555

我的表达(不工作)是:

/([0-9]? ?)?(([0-9]{3})|(\([0-9]{3}\)))( |\-)?\2\5?\2[0-9]/ig

你能帮帮我吗?我不知道怎么了...

【问题讨论】:

标签: regex validation expression match regex-group


【解决方案1】:

好吧,这个有点棘手,实际测试一下。

给你:

^(\d\s?(?:\(\d{3}\))?\s?[\d|\-]{8,12})$

这个只捕获完整的数字并返回完整的数字,而不是像其他答案中提到的其他部分一样。

在这里测试:

https://regex101.com/r/hI5vT2/2

【讨论】:

    【解决方案2】:

    你可以想出:

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

    查看demo on regex101.com

    细分:

    ^   - an anchor to bind the expression to the beginning of the line
    \d  - one digit of 0-9
    \ * - zero or more spaces
    (?:\(\d+\))? - digits in parentheses, made optional
    [- \d]+ - characters from the specified class
    $ - bind the expression to the end 
    

    但引用regex标签:

    由于正则表达式没有完全标准化,所有问题 带有此标签的还应包括一个指定适用的标签 编程语言或工具。

    请更新您的问题并应用使用的编程语言。


    正如@Aminah 所指出的,给定的正则表达式存在缺陷,可以通过使用前瞻来避免,例如:

    ^(?!.*-{2,})\d\ *(?:\(\d+\))?[- \d]+$
    

    (?!.*-{2,}) 确保不允许有两个斜杠。

    【讨论】:

    • 你错了。如果你这样做,5555-----怎么样?`
    • @AminahNuraini:你是对的。我会添加一个negative lookahead,但该示例不在原始问题中。
    • 他说的是电话号码。这对于该示例来说已经足够描述了。
    • @AminahNuraini:更新了答案。
    【解决方案3】:

    你可以用这个:

    /^(\d? ?)?(\d{3}|\(\d{3}\))[ -]?\d{3}[ -]?\d+$/gm
    

    Demo

    解释:

    1. ^(\d? ?)?: ^ 匹配字符串的开头。 \d 等于 [0-9]
    2. (\d{3}|\(\d{3}\)):匹配第二组括号是可选的。你是对的,但你放了太多不必要的括号。
    3. [ -]?:等于( |-)?
    4. \d+$$ 是字符串的结尾。
    5. /gm: m 标志用于多行

    【讨论】:

    • 数字需要不区分大小写的修饰符在哪里?
    • 我们不需要它,但我忘了从提问者写的原始正则表达式中删除它
    • @AminahNuraini:谢谢!!!我尝试重复捕获组 555 = ([0-9]{3}) = group #3 和 ( |\-) = #5 但它不起作用。你能告诉我有什么问题吗?
    • 应该是第2组。你算错了。
    • 对不起,我试过了,但我也很困惑
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    相关资源
    最近更新 更多