正则表达式允许以逗号分隔的代码列表

时间:2015-01-06 11:34:27

标签: regex

我有一个需要验证的输入表单,列表必须遵循这些规则

  • 逗号分隔
  • 每个代码都可以
    • 以单个字母开头,后跟单个下划线,后跟任意数量的字母或
    • 一组数字
  • 列表不得以尾随逗号结尾

有效示例数据

  • A_AAAAA,B_BBBBB,122334,D_DFDFDF
  • 12345,123567,123456,A_BBBBB,C_DDDDD,1234567

无效的示例数据

  • RR_RRR,12345
  • 1_111,AVSFFF,
  • A_SDDF ,, 123342

我正在使用http://www.regexr.com并且已达到此目的:[A-Z _] _ [A-Z] ,| [0-9]

这个问题是没有选择每个有效数据示例中的最后一个代码,因此该行不会传递正则表达式模式

2 个答案:

答案 0 :(得分:1)

试试这个 -

^(?:[A-Z]_[A-Z]*|[0-9]+)(?:,(?:[A-Z]_[A-Z]*|[0-9]+))*$

Demo

答案 1 :(得分:1)

试试这个:

^(?:(?:[A-Za-z]_[A-Za-z]*|\d+)(?:,|$))+(?<!,)$

regex101 demo.


说明:

^  start of string
(?:  this group matches a single element in the list:
    (?:
        [A-Za-z]  a character
        _         underscore
        [A-Za-z]* any number of characters (including 0)
    | or
        \d+  digits
    )
    (?: followed by either a comma
        ,
    |  or the end of the string
        $
    )
)+  match any number of list elements
(?<!  make sure there's no trailing comma
    ,
)
$  end of string