在正则表达式中限制字符长度
我使用以下正则表达式而不限制任何字符长度
var test = /^(a-z|A-Z|0-9)*[^$%^&*;:,<>?()\""\']*$/ //Works Fine
在上面,当我尝试将字符长度限制为如下所示的15个时,会引发错误。
var test = /^(a-z|A-Z|0-9)*[^$%^&*;:,<>?()\""\']*${1,15}/ //**Uncaught SyntaxError: Invalid regular expression**
请帮助我使上述regEx的字符数限制为15。
回答:
您不能将量词应用于锚点。相反, 在开头使用锚定先行:
^(?=.{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]*[^$%^&*;:,<>?()\"']*$ ^^^^^^^^^^^^^^^^^
以上是 在正则表达式中限制字符长度 的全部内容, 来源链接: utcz.com/qa/430369.html