regex 在正则字符括号中包含连字符?

ujv3wf0j  于 2023-06-30  发布在  其他
关注(0)|答案(7)|浏览(96)
$.validator.addMethod('AZ09_', function (value) { 
    return /^[a-zA-Z0-9.-_]+$/.test(value); 
}, 'Only letters, numbers, and _-. are allowed');

当我使用像test-123这样的东西时,它仍然会触发,就好像连字符是无效的一样。我试了\---

ykejflvf

ykejflvf1#

使用\-转义应该没问题,但您也可以尝试将其放在字符类的开头或结尾。这应该对你有用:

/^[a-zA-Z0-9._-]+$/
sdnqo3pr

sdnqo3pr2#

使用\-转义连字符是正确的方法。
我已经验证了表达式/^[a-zA-Z0-9.\-_]+$/允许连字符。您也可以使用\w类将其缩短为/^[\w.\-]+$/
(将连字符放在表达式的最后实际上会导致它不需要转义,因为它不能是范围的一部分,但是您可能仍然希望养成总是转义它的习惯。

wko9yo5t

wko9yo5t3#

- maybe不起作用,因为你用一个字符串从服务器传递了所有的东西。如果是这样的话,你应该首先转义\,这样服务器端程序也可以处理它。

  • 在服务器端字符串中:\-
  • 在客户端:-
  • 在regex(covers)中:-

或者,您可以简单地在[]方括号的和处放置。

slhcrj9b

slhcrj9b4#

一般来说,对于正则表达式中的连字符(-),重要的是要注意转义(\-)和不转义(-)连字符之间的区别,因为连字符除了本身是一个字符外,还被解析为指定正则表达式中的范围。
In the first case,带转义连字符(\-),regex将仅匹配示例/^[+\-.]+$/中的连字符
In the second case,这里不转义,例如/^[+-.]+$/,因为连字符在加号和点之间,所以它将匹配ASCII值在43(表示加号)和46(表示点)之间的所有字符,因此将包含逗号(ASCII值为44)作为副作用。

vwoqyblh

vwoqyblh5#

\-应该可以转义字符范围中的-。你能引用你测试过的东西吗?因为它似乎起作用了:http://jsbin.com/odita3

beq87vna

beq87vna6#

匹配连字符的一种更通用的方法是使用字符类来匹配连字符和破折号(不带引号的“\p{Pd}”)。如果您正在处理来自不同文化和来源的文本,您可能会发现有更多类型的连字符,而不仅仅是一个字符。您可以将其添加到[]表达式中

cetgtptt

cetgtptt7#

尽管在大多数情况下都是被接受的答案,但在使用字段验证时,我发现了一些问题,甚至是scaping,不仅是连字符,还有其他字符,如空格(\s)或点(.)。通常情况下,一个scape \-就可以完成这项工作,但在验证中似乎需要双重scaping它们,即scape the scaping backslash:\\-
希望这对某人有帮助。

相关问题