您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在正则表达式中限制字符长度

在正则表达式中限制字符长度

您不能将量词应用于锚点。相反, 在开头使用锚定先行:

^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*$
  ^^^^^^^^^^^

另外,我假设您想将0个或多个字母或数字与匹配(a-z|A-Z|0-9)*。它应该看起来像[a-zA-Z0-9]*(即在此处使用字符类)。

量词仅适用于左侧的子模式,无论是组,字符类还是文字符号。因此,^[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']{1,15}$将有效地将第二个字符类的长度限制[^$%^&*;:,<>?()\"']为1到15个字符。在^(?:[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*){1,15}$将“限制”的2子模式无限长度的序列(作为*(和+,也行)可以字符的无限数量的匹配),以1?15倍,我们仍然不限制的长度整个输入串

(?=.{1,15}$) 出现后立即^启动的字符串 。这是一个 零宽度的断言 ,仅在检查其子模式是否与后续字符匹配后才返回true或false。因此,此前瞻尝试匹配任何1到15个字符(由于{1,15}),但要匹配字符串末尾的换行符(由于$锚点)。如果我们$从前瞻中删除锚,则前瞻仅需要字符串 包含 1到15个字符,但是总字符串长度可以是任意长度。

如果输入字符串可以包含换行符序列,则应使用[\s\S]可移植的任何字符正则表达式构造(它将在JS和其他常见的regex风格中使用):

^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*$
 ^^^^^^^^^^^^^^^^^
其他 2022/1/1 18:22:43 有648人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶