Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在正则表达式字符括号中包含连字符?_Javascript_Jquery_Regex_Testing_Validation - Fatal编程技术网

Javascript 在正则表达式字符括号中包含连字符?

Javascript 在正则表达式字符括号中包含连字符?,javascript,jquery,regex,testing,validation,Javascript,Jquery,Regex,Testing,Validation,当我使用诸如test-123之类的东西时,它仍然会触发,就好像连字符无效一样。我尝试了\-和-使用\-转义连字符是正确的方法 我已验证表达式/^[a-zA-Z0-9.\-\]+$/是否允许连字符。您还可以使用\w类将其缩短为/^[\w.\-]+$/ (将连字符放在表达式的最后实际上会导致它不需要转义,因为它不能成为范围的一部分,但是您可能仍然希望养成总是转义的习惯。)使用\-转义应该可以,但您也可以尝试将它放在字符类的开头或结尾。这应该适合您: $.validator.addMethod('AZ

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

使用
\-
转义连字符是正确的方法

我已验证表达式
/^[a-zA-Z0-9.\-\]+$/
是否允许连字符。您还可以使用
\w
类将其缩短为
/^[\w.\-]+$/


(将连字符放在表达式的最后实际上会导致它不需要转义,因为它不能成为范围的一部分,但是您可能仍然希望养成总是转义的习惯。)

使用
\-
转义应该可以,但您也可以尝试将它放在字符类的开头或结尾。这应该适合您:

$.validator.addMethod('AZ09_', function (value) { 
    return /^[a-zA-Z0-9.-_]+$/.test(value); 
}, 'Only letters, numbers, and _-. are allowed');

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

这个\-可能不起作用,因为您用一个字符串从服务器传递了所有内容。如果是这种情况,您应该首先转义\以便服务器端程序也可以处理它

  • 在服务器端字符串中:\\-
  • 在客户端:\-
  • regex格式(封面):-

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

匹配连字符的一种更通用的方法是使用字符类来匹配连字符和破折号(“\p{Pd}”不带引号)。如果您正在处理来自不同文化和来源的文本,您可能会发现有更多类型的连字符,而不仅仅是一个字符。您可以在[]表达式中添加这一点,通常在正则表达式中使用连字符(
-
)字符,重要的是要注意转义(
-
)和不转义(
-
)之间的区别,因为连字符本身除了作为字符外,还被解析为在正则表达式中指定范围

在第一种情况下
,使用转义连字符(
\-
),正则表达式将仅与示例中的连字符匹配


在第二种情况下
,此处不转义,例如
/^[+-.]+$/
,因为连字符介于加号和点之间,因此它将匹配ASCII值介于43(加号)和46(点)之间的所有字符,因此将包括逗号(ASCII值44)作为副作用。

我的问题是,我实际上使用的是AZ09方法,而不是AZ09方法。非常好:D尽管我更喜欢可读性(我想对一些专家来说\w会很容易),但将连字符放在最后并不适用于某些Microsoft工具,如Microsoft SQL Server Management Studio。将其转义为连字符确实有效。将连字符放在最后不适用于某些Microsoft工具,如Microsoft SQL Server Management Studio。转义连字符确实有效。@SabaAhang,因为如果它在开头或结尾,则不能在其他两个字符之间创建一个字符范围(例如
[0-9]
)@SabaAhang下面的文档页面提到可以在字符的开头或结尾取消连字符:我需要在服务器端使用C#。成功了。谢谢。@Topman更好(对于C#),用于服务器端正则表达式、文件名等以避免混淆(
@“\”
而不是
“\”
)。
/^[a-zA-Z0-9._-]+$/