验证提取记录的范围



我正在处理一个正则表达式,它需要以下模式带空格和不带空格

  • 字母数字值的逗号分隔列表:DG1、D3或R4、UI2
  • 字母数字和数字值的逗号分隔列表:D1、2或D1,2
  • 字母数字值范围:DG1-DG5或DG1-DG5
  • 字母数字和数值范围:DG1-8或DG1-8或8-DG11或8-DG13
  • 范围和逗号分隔值的组合:DG1、DG3-DG7或DG1、DG 3-DG6
  • 范围和逗号分隔的字母数字和数字值的组合:DG1、3-DG7或1、DG3-6
  • 除逗号和连字符外,不允许使用其他特殊字符
  • 两个特殊字符不能组合在一起
  • 不能以特殊字符开头或结尾

无效值可能是

  • ,1,DG1
  • -DG1-5
  • DG1-3-GP9
  • 1、F4
  • RE3-
  • 1,-G3
  • 5,S3,-9

我会使用:

^([A-Z0-9]+(?:-[A-Z0-9]+)?)(?:,(?1))*$

解释:

^                       : Start of string
    (                   : begin group 1
        [A-Z0-9]+       : 1 or more alphanum
        (?:             : begin NON capture group
            -           : literally -
            [A-Z0-9]+   : 1 or more alphanum
        )?              : end group, optional
    )                   : end group 1
    (?:                 : begin NON capture group
        ,               : literally ,
        (?1)            : repeat regex in group 1
    )?                  : end group,optional
$

如果(?1)不起作用,则必须复制相关部分:

^[A-Z0-9]+(?:-[A-Z0-9]+)?(?:,[A-Z0-9]+(?:-[A-Z0-9]+)?)*$

如果你想处理可选空间:

^s*[A-Z0-9]+(?:s*-s*[A-Z0-9]+)?(?:s*,s*[A-Z0-9]+(?:s*-s*[A-Z0-9]+)?)*s*$

最新更新