允许新字符到Regex的问题

时间:2012-01-19 17:24:51

标签: regex

当前正则表达式:

^([\d-]*[A-z]?|[A-z]?[\d-]*|[\d-]*[A-z]?[\d-]*){3}$ 

(最多允许3个字母和任意数量的数字或连字符)

我还想允许正斜杠(/)就像hypen( - ),其中没有限制,但我做错了,它不符合以下顺序。

更新了正则表达式:

^([\d-]*[\d/]*[A-z]?|[A-z]?[\d-]*[\d/]*|[\d-]*[\d/]*[A-z]?[\d-]*[\d/]*){3}$

(允许最多3个字母和任意数量的数字或连字符或正斜杠)

好: 1234-aAa /

好: 1234 / aAa -

差错: 1234aAa / -

这只发生在正斜杠和3个字母后添加连字符时,我更新的正则表达式出了什么问题?顺序对任何字符都无关紧要,它只对字符串中的总字符数有效。谢谢!

1 个答案:

答案 0 :(得分:1)

在这里试试

^(?=(?:[^a-z]*[a-z]){0,3}[^a-z]*$)[a-z0-9/-]*$

查看并测试here on Regexr

我只使用a-z和IgnoreCase选项,因为A-z不是[A-Za-z],其中有一些字符更多。

所以,基本上我的正则表达式匹配我在最后的字符类中允许的所有[a-z0-9/-]*

此部分(?=(?:[^a-z]*[a-z]){0,3}[^a-z]*$)是一个积极的前瞻,确保您需要最多3个字母。见here for more about lookaheads