【问题标题】:Javascript regexp pattern with fixed length, leading spaces and digits具有固定长度、前导空格和数字的 Javascript 正则表达式模式
【发布时间】:2019-03-20 23:47:30
【问题描述】:

我需要一个正则表达式模式,该模式与带有前导空格的固定长度数字字符串(六个字符)匹配。空格(零或最多 5 个)始终位于字符串的左侧。数字(1 或最大 6)始终位于右侧。 所以:

"     4" is valid
"123456" is valid too

"12    " is not valid
"  12  " is not valid
"12  34" is not valid
"      " is not valid

我尝试使用/^( ){0,5}(\d){1,6}$/,但它不起作用,因为它不检查字符串的总长度。我也试过/^( |\d){6}$/,但它不检查空格/数字的位置。现在我被困住了,我知道有一个解决方案,但我自己找不到,也找不到互联网。提前致谢。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以使用正向前瞻 (?= 来断言 6 个字符的长度:

    ^(?=.{6}$)[ ]{0,5}[0-9]{1,6}$
    

    说明

    • ^ - 字符串开始
    • (?=.{6}$) 正向前瞻,断言右边是 6 个字符并断言字符串的结尾。
    • [ ]{0,5}[0-9]{1,6}空格匹配0-5次,数字匹配1-6次
    • $字符串结束

    Regex demo

    【讨论】:

    • 谢谢,它解决了问题。你能澄清一下两个$(美元符号)的需要吗?这对我来说似乎是多余的,尤其是第一个。谢谢。
    • @Mzm 在第一部分^(?=.{6}$) 你断言,在开始之后,字符串的结尾必须正好有 6 个字符。如果您在此处省略 $,则匹配 5 次空格后跟 6 次数字也会匹配。
    【解决方案2】:

    这应该可以工作

    ^(?:\d{6}|\s\d{5}|\s{2}\d{4}|\s{3}\d{3}|\s{4}\d{2}|\s{5}\d{1})$
    

    或仅用于空格

    ^(?:\d{6}| \d{5}| {2}\d{4}| {3}\d{3}| {4}\d{2}| {5}\d{1})$
    

    可能有一种更优雅的方法可以做到这一点,但它会检查空格和数字的所有组合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      相关资源
      最近更新 更多