代码之家  ›  专栏  ›  技术社区  ›  Frenchi In LA

用逗号分隔的整数

  •  3
  • Frenchi In LA  · 技术社区  · 15 年前

    用逗号分隔的整数的最佳正则表达式是什么?它还可以包含逗号之间的空格,不需要字段,这意味着它可以是空白的。

    123,98549
    43446
    

    等。。

    4 回复  |  直到 8 年前
        1
  •  7
  •   nickf    15 年前

    这是一个非常基本的方法,可能适合您:

    /^[\d\s,]*$/
    

    它将匹配任何字符串,只要它只包含数字、空格和逗号。这意味着“123456”会通过,但我不知道这是否有问题。

    /^\s*(\d+(\s*,\s*\d+)*)?\s*$/
    

    这个结果是:

    ""                true
    "123"             true
    "123, 456"        true
    "123,456  , 789"  true
    "123 456"         false
    "   "             true
    "  123   "        true
    ", 123 ,"         false
    

    说明:

    /^\s*(\d+(\s*,\s*\d+)*)?\s*$/
     1 2 3 4 5 6 7 8  9  a b c d
    
    1. ^   Matches the start of the string
    2. \s  Matches a space  * means any number of the previous thing
    3. (   Opens a group
    4. \d  Matches a number. + means one or more of the previous thing
    5. (   Another group
    6. \s* 0 or more spaces
    7. ,   A comma
    8. \s* 0 or more spaces
    9. \d+ 1 or more numbers
    a. *   0 or more of the previous thing. In this case, the group starting with #5
    b. ?   Means 0 or 1 of the previous thing. This one is the group at #3
    c. \s* 0 or more spaces
    d. $   Matches the end of the string
    
        2
  •  2
  •   Amirshk    15 年前

    假设您想要一个整数列表: (\d+)

    逗号和空格不应该是一个问题,因为您只需要检查组。

        3
  •  1
  •   eKek0    15 年前

    我不知道你对这个领域是什么意思

    不需要,这意味着它可以 是空白的

    除此之外,我认为这是不可能的

    /^((\b)*[0-9]+(\b)*[,])*(\b)*[0-9]+(\b)$/
    
        4
  •  0
  •   Gras Double    15 年前

    这个问题应该更精确:例如,您接受数字之间的空格吗?在开始/结束时接受逗号吗?你接受逗号前的空格吗?你接受几个连续的空格吗?开始/结束时接受空格吗?

    我假设我认为最有可能的是,这样你就不会接受数字之间的空格,也不会在开始/结束时接受逗号,但是你接受逗号前后的空格,你会接受几个连续的空格,也会在开始/结束时接受空格。

    /^ *([0-9]+( *, *[0-9]+)*)? *$/
    
    • “”:真的
    • “”:真的
    • “123”:真
    • “123 45”:真
    • “123、45、67”:正确
    • “123”:真
    • “1 2 3”:错误
    • “45”:假
    • “123”:假

    当编写regex以匹配由分隔符“s”分隔的元素列表“e”时,关键是您必须编写两次“e”匹配器(这里只是“[0-9]+”。

    • 模式的原理是e(se)*
    • E是“[0-9]+”:简单的数字序列
    • s是“*,*”(注意空格):逗号,前面和后面有可选空格

    现在我们有:

    /^[0-9]+( *, *[0-9]+)*$/
    

    我们稍微改进了一点,所以它还接受开始/结束时的空格、仅空格和空字符串:

    /^*([0-9]+(*,*[0-9]+)*)?*美元/
    

    注意,我个人更喜欢使用[0-9]而不是\d,我认为阅读起来不那么容易混淆。