用正则表达式验证逗号分隔的数字列表

这种情况应匹配:

1.23
1
1,
1.2,4
1.23, 4
1.23, 4,
1, 2.34
1.

这种情况下不应:

1,,
1.234

因此,逗号后可以有逗号或点,零或一。数字可以是整数,也可以是最多两个分数的浮点数。

I've made this regex, but it fails on numbers with more than two fractions: https://regex101.com/r/CLTP2j/75

/^(?:\d+(?:\.[\d{1,2}]*)?|\.[\d{1,2}]+)(?:,[\s]?(?:\d+(?:\.[\d{1,2}]*)?|\.[\d{1,2}]+))*$/
评论
  • 22相亲
    22相亲 回复

    使用以下正则表达式:

    ^\d+(?:\.\d{0,2})?(?:,\s*\d+(?:\.\d{0,2})?)*,?$
    

    Demo

    与其给出我使用的模式的典型冗长(且难以辨认)的完整细分,不如解释一个更简单的要求。假设您要验证大写字母的CSV列表,例如

    A,B,C
    

    您将使用的模式是:

    ^[A-Z](?:,[A-Z])*,?$
    

    请注意,右边的术语表示允许添加零个或多个逗号,后跟另一个字母。您的要求也是尾随逗号,因此上述模式也包括逗号。