当前位置: 首页 > 面试题库 >

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

后星河
2023-03-14
问题内容

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

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]*(即在此处使用字符类)。

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

量词仅应用于左侧的子模式,无论是组,字符类还是文字符号。因此,^[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个字符,但是总字符串长度可以是任意长度。

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

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


 类似资料:
  • 我想验证用户的输入,我使用以下(工作良好)作为regex。 但当我尝试所有我想要的角色时,就是这样。 它不起作用,我不知道为什么。此外,如果您能向我解释添加和有什么不同,我将不胜感激。另外,我尝试使用来代替空格,但仍然不起作用(我更喜欢使用空格,因为我想限制行的更改)。

  • 我有以下正则表达式: 这允许: 开头可选 然后是数字、点、逗号、圆括号、破折号和空格。 除此之外,我需要确保数字和加号(如果存在)的长度在9到15之间(所以我不计算符号之外的任何特殊字符)。 最后一个条件是我有问题的地方。 有效输入: 358(9)1234567 无效输入: 3.5 8.9,1-2(3)4.5,6.77777(33个字符,只有20个计数字符(数字和加号)太多) 如果可能的话,使用正

  • 我有一个正则表达式,它适用于 (字母数字-不分大小写) (仅限字母-与大小写无关) (只允许使用特殊字符和) null 我们是否可以修改上面的正则表达式来限制上面的两个测试用例?

  • 主要内容:实例下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或

  • 我希望有一个正则表达式来检查字符串是否包含大小写字母、数字、下划线以及字符限制。这些是字符串中唯一允许的类型。

  • 我不熟悉Javascript和正则表达式,所以我一直在研究如何使路由匹配所有以