【问题标题】:How can I match this string '-,-,-,9,-'?我怎样才能匹配这个字符串'-,-,-,9,-'?
【发布时间】:2015-05-25 13:13:53
【问题描述】:

我被告知要像这样验证字符串 -,-,-,9,-

,分隔,包含1个数字(0-9),其他都是-

一些例子:

9,-,-,-,-

-,-,-,-,9

-,-,2,-,-

我怎样才能匹配这个?我应该在正则表达式中学习哪些概念?

更新

我错过了时间,对不起,这个字符串只能包含5部分,所以长度只能是9,这意味着下面的字符串不应该传递:

-,-,9,-,-,-

当然,它应该只有一个数字。

【问题讨论】:

    标签: regex preg-match regex-negation


    【解决方案1】:
    ^(?=\D*\d\D*$)[0-9-](?:,[0-9-]){4}$
    

    你可以试试这个。查看演示。

    https://regex101.com/r/nM7nT5/5

    【讨论】:

    • 上述正则表达式还将传递包含多个数字的字符串,例如-,-,2,3,4
    • @Jason ^(?=[,-]*\d[,-]*\d[,-]*$)[0-9-](?:,[0-9-]){4}$
    【解决方案2】:

    这确保字符串必须至少有一个逗号和一个数字。

    ^(?:\d(?:,-)+|-(?:,-)*,\d(?:,-)*)$
    

    DEMO

    ^(?=\D*(?:^|,)\d(?:,|$)\D*$)[\d-](?:,[\d-])+$
    

    DEMO

    【讨论】:

    • 我只需要五个部分,我认为这应该可行:^(?=\D*(?:^|,)\d(?:,|$)\D*$)[\d-](?:,[\d-]){4}$
    • @Jason 没错,你明白了。但请尽量避免在 5 分钟宽限期后编辑您的问题。
    • 非常感谢,我明白了~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2012-02-03
    • 1970-01-01
    • 2015-12-02
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多