有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

获取记录的java验证范围

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

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

可能存在无效值

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

共 (1) 个答案

  1. # 1 楼答案

    我会用:

    ^([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*$