regex RUC巴拉圭验证器

x759pob2  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(70)

我想为来自巴拉圭的RUC做一个验证。
现在我可以验证这个表达式^[0-9+#-]*$并得到这个结果1234567-8,但我还必须验证这个值:
1234567->仅数字
1234567A-8->数字后面只有一个字母,后面是-8

w7t8yxp5

w7t8yxp51#

你可以用

^[0-9]+[A-Z]?(-[0-9])?$

参见regex demo

  • 详情 *:
  • ^-字符串开始
  • [0-9]+-一个或多个数字
  • [A-Z]?-可选大写ASCII字母
  • (-[0-9])?--和数字的可选序列
  • $-字符串结束。
jm2pwxwz

jm2pwxwz2#

两种选择:“非常长”和“非常短”的版本。两者都假定RUC(无校验位)的长度为6到8个字符。
1.最后一个“非常长”的版本:
在这里,可以出现在文档末尾的唯一字母数字字符是大写 A

^(?:(?!0)\d{6,8}|(?!0)\d{5,7}A)(?:-\d)?$
^           # Start of string
  (?:         # Start of first non-capturing group:
    (?!0)       # Negative lookahead (?!): avoid starting with zero
    \d{6,8}     # Digits (an equivalent is [0-9]); 6 to 8 times
      |           # Or
    (?!0)       # Negative lookahead (?!): avoid starting with zero
    \d{5,7}A    # Digits (an equivalent is [0-9]); 5 to 7 times, followed by an 'A'
  )           # End of first non-capturing group
  (?:         # Start of second non-capturing group:
    -\d         # A hyphen followed by a single digit
  )?          # End of second non-capturing group; '?' = 'optional': may or may not appear
$           # End of string

具有捕获组的版本:

^((?!0)\d{6,8}|(?!0)\d{5,7}A)(-\d)?$

1.最短的版本:
在这种情况下,只有大写 ABCD 可以是可以出现在文档结尾的字母数字字符。

^[1-9]\d{4,6}[\dA-D](?:-\d)?$

# or

^[1-9]\d{4,6}[\dA-D](-\d)?$
^           # Start of string
  [1-9]       # Digits from 1 to 9 (avoid starting with zero)
  \d{4,6}     # Digits (an equivalent is [0-9]); 4 to 6 times
  [\dA-D]     # Digits or capital A/B/C/D
  (?:         # Start of non-capturing group:
    -\d         # A hyphen followed by a single digit
  )?          # End of second non-capturing group; '?' = 'optional': may or may not appear
$           # End of string

均在JavaScript中测试。

相关问题