Regex未按预期工作
Regex not working as expected
这个正则表达式出了什么问题?
/^[a-zA-Z'd's&#-'('"]{1,7}$/;
当我输入以下有效输入时,它失败了:
a&'-#"2
还要检查输入中是否有2个连续空格。
短划线需要转义('-
)或放在字符类的末尾,否则它将表示一个范围(如A-Z
),而不是文字短划线:
/^[A-Z'd's&#('"-]{1,7}$/i
将是一个更好的正则表达式。
N。B: [#-'(]
将匹配#
、$
、%
、&
、'
或(
。
要解决不允许两个连续空格的附加要求,请使用前瞻断言:
/^(?!.*'s{2})[A-Z'd's&#('"-]{1,7}$/i
(?!.*'s{2})
的意思是"断言(从当前位置)不可能匹配后面跟着两个空白字符的任何字符串"。需要注意的是:点与换行符不匹配。
-
(连字符)在字符类中具有特殊含义,用于指定范围。你是想逃避吗
/^[a-zA-Z'd's&#'-'('"]{1,7}$/;
此RegExp与您的输入相匹配。
在角色类的中间有一个未标注的-
。这意味着您实际上正在搜索#
和(
(包括#
、$
、%
、&
、'
和(
)之间的所有字符。要么将其移动到末尾,要么用反斜杠对其进行转义。您的正则表达式应为:
/^[a-zA-Z'd's&#'('"-]{1,7}$/
或
/^[a-zA-Z'd's&#'-'('"]{1,7}$/
删除;在末端和
^[a-zA-Z'd's'&'#'-'('''"]+$
您的输入与正则表达式不匹配。这里的问题是正则表达式中的连字符。如果您将其从"#"字符后的位置移动到正则表达式的开头,如下所示:
/^[-a-zA-Z'd's&#'('"]{1,7}$/;
一切都很好。
您可以始终使用Rubular来检查正则表达式。我经常使用它(并非双关语)。
相关文章:
- 要替换的Javascript Regex无法按预期工作
- Regex拆分-工作一次
- 为什么除了html5输入模式属性之外,这个简单的regex在任何地方都能工作
- 我该怎么做;仅百分比”;Regex工作
- 我的regex可以在regex101.com沙箱中工作,但不能在实际的javascript中工作
- 用于Javascript字母数字的RegEx无法按预期工作
- Regex未在服务器端验证的代码隐藏中工作
- Javascript regex在在线验证器上工作,但在代码中失败
- Regex无法在JavaScript中工作
- regex可以在regex测试程序中工作,但不能在模式中工作
- Regex Lazy模式不会'没有按预期工作
- jQuery-RegEx工作异常
- regex's+-s*|s*-s+'无法正常工作
- 匹配简单URL的regex无法正常工作
- Regex模式无法正常工作.但仅在Extjs/Javascript中
- Regex模式验证手机不工作
- Regex未按预期工作
- 尝试更新vimeo-regex以从URL获取ID,该URL包括“;频道/工作人员挑选”;
- 这个RegEx和替换在JavaScript中究竟是如何工作的
- 如何让Javascript中的除法运算符工作?它认为它'是Regex