gpt4 book ai didi

javascript - 限制正则​​表达式中的字符长度

转载 作者:行者123 更新时间:2023-11-30 19:38:32 26 4
gpt4 key购买 nike

我正在使用以下正则表达式而不限制任何字符长度:

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**

如何使上述正则表达式在字符数限制为 15 的情况下工作?

最佳答案

您不能将量词应用于 anchor 。相反,要限制输入字符串的长度,请使用锚定在开头的前瞻:

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

// Or, in flavors other than ECMAScript and Python
\A(?=.{1,15}\z)[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*\z
^^^^^^^^^^^^^^^

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

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

为什么不使用限制量词,例如 {1,15} , 最后呢?

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

前瞻限制如何工作?

(?=.{1,15}$)/(?=.{1,15}\z)/(?=.{1,15}\Z) positive lookahead出现在 ^ 之后/\A (注意在 Ruby 中,\A 是唯一匹配整个字符串开头的 anchor ) start-of-string anchor .这是一个零宽度断言,仅在检查其子模式是否与后续字符匹配后返回 true 或 false。因此,此前瞻尝试匹配任何 1 到 15(由于 limiting quantifier {1,15} )字符,但字符串末尾的换行符(由于 $/\z/\Z anchor ) .如果我们删除 $/\z/\Z lookahead 中的 anchor ,lookahead 只要求字符串包含 1 到 15 个字符,但字符串总长度可以是任意长度。

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

// ECMAScript (JavaScript, C++)
^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*$
^^^^^^^^^^^^^^^^^

// Or, in flavors other than ECMAScript and Python
\A(?=[\s\S]{1,15}\z)[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*\z
^^^^^^^^^^^^^^^^^^

// Or, in Python
\A(?=[\s\S]{1,15}\Z)[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*\Z
^^^^^^^^^^^^^^^^^^

关于javascript - 限制正则​​表达式中的字符长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com