Regex最大长度失败

本文关键字:失败 Regex | 更新日期: 2023-09-27 18:05:18

我想要一个允许以下格式的正则表达式

  1234567-8
  123456B

现在如果用户输入第二个模式那么他应该锁定最多输入7个字符所以

 1234568B
  123456V1
this becomes invalid

我试过了

[0-9]{7}-[0-9]|[[0-9]{6}[A-z]{1}]{7,7} 

但是失败了

Regex最大长度失败

对于您提供的示例输入,您可以使用^([0-9]{7}-[0-9]|[0-9]{6}[A-Za-z])$

更简洁的版本:^[0-9]{6}(?:[0-9]-[0-9]|[A-Za-z])$ .

注意1234567-8有7个数字和一个连字符后面跟着一个数字,所以整个字符串的长度不能限制为7个字符。

在。net和几乎所有其他类型的正则表达式中,[A-z]是一个错误,因为它可以匹配的不仅仅是字母。

将量词{1}放入字符类中使其成为简单的符号组合,因此[{1}]匹配{1}

{7,7} (= {7})不会将整个字符串长度限制为7,因为您在表达式周围没有 (^$),并且您通过将前面的量词放入字符类而"破坏"了它们。

我想这就是你需要的:

^('d{7}-'d|'d{6}[A-Z])$

7位,破折号,数字或6位,1个大拉丁字母

^'d{6}(?:'d-'d|[A-Z])$

它可以很好地满足以上两种格式

1234567 - 8

123456 b