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}
但是失败了
对于您提供的示例输入,您可以使用^([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