限制正则表达式中的字符长度
您的初始正则表达式允许无限的字符长度,但是当您尝试将其限制为 15 时带有量词 {1,15} 的字符,您遇到了错误。这是因为量词不能应用于锚点,例如 ^ 字符串开头锚点。
使用 Lookahead 的解决方案
要有效限制字符长度,您可以可以利用锚定在字符串开头的正前瞻:
^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()"]*
此前瞻确保后续字符串匹配 1 到 15 个字符(由量词 {1,15} 指定)并在匹配后立即结束。 $ 锚点表示字符串的结尾。
避免限制量词
在正则表达式末尾使用量词,例如^[a-zA-Z0-9]*[^$%^&*;:,<>?()"]{1,15}$,会错误地将第二个字符类的长度限制为1 到 15 个字符。它不会限制整个字符串的长度。
Lookahead 如何有效
前瞻 (?=.{1,15}$) 计算后续 1 到 15 个字符,包括字符串末尾的换行符(由于 $ 锚)。满足此条件,表达式返回 true,否则返回 false。
处理换行符序列
如果您的输入可以包含换行符序列,您可以将 . 通配符替换为 [sS] 可移植的任意字符构造:
^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()"]*
以上是如何使用 Lookahead 限制正则表达式中的字符长度?的详细内容。更多信息请关注PHP中文网其他相关文章!