代码之家  ›  专栏  ›  技术社区  ›  Jimmy

允许数字范围的正则表达式,或为空

  •  7
  • Jimmy  · 技术社区  · 15 年前

    我有以下正则表达式,如何修改它以允许空值?

    [0-9]{5}|[0-9]{10}

    我想允许5位数,10位数或空

    谢谢

    3 回复  |  直到 10 年前
        1
  •  6
  •   Jez    15 年前

    如果“空”是指空字符串,则需要:

    ^(?:[0-9]{5}|[0-9]{10}|)$
    
        2
  •  12
  •   aioobe    15 年前

    只是追加 |null :

    [0-9]{5}|[0-9]{10}|null
    

    你可能知道, | 是“或”运算符和字符串 null 匹配单词null。因此,它可以被读出为 <your previous pattern> or null .


    如果您希望模式与空字符串匹配,那么答案是这是不可能的。也就是说,你没有办法,例如, Matcher.matches() 对于空输入字符串,返回true。如果这就是你想要的, 你可以逃脱 使用上面的regexp和matching not on str 但关于 ""+str 会导致 "null" 如果 STR 实际上等于 无效的 .

        3
  •  5
  •   Tim Pietzcker    15 年前
    [0-9]{5}|[0-9]{10}|null
    

    应该这样做。根据您使用regex的方式,您可能需要锚定它,以确保它始终与 整个的 字符串,而不仅仅是八位字符串中的五位子字符串:

    ^(?:[0-9]{5}|[0-9]{10}|null)$
    

    ^ $ 锚定正则表达式, (?:...) 是包含交替的非捕获组。

    编辑:如果你是说 null ==“空字符串”,然后使用

    ^(?:[0-9]{5}|[0-9]{10}|)$