Javascript 正则表达式,不读取整个字符串

Javascript 正则表达式,不读取整个字符串,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个标准表达式不能正常工作。 如果字符串中的任何位置有无效字符,则该表达式应捕获。它在RegExr.com上运行得很好,但在我的测试中却不行 exp为:/[a-zA-Z0-9'.\-]/g 它在以下位置失败:@#@ 但是带着:aa@#@ 它应该失败两次,我做错了什么 另外,/^[a-zA-Z0-9'.\-]$/g与任何内容都不匹配 //All Boxs $('input[type="text"]').each(function () { var te

我有一个标准表达式不能正常工作。 如果字符串中的任何位置有无效字符,则该表达式应捕获。它在RegExr.com上运行得很好,但在我的测试中却不行

exp为:
/[a-zA-Z0-9'.\-]/g

它在以下位置失败:
@#@
但是带着:
aa@#@

它应该失败两次,我做错了什么

另外,
/^[a-zA-Z0-9'.\-]$/g
与任何内容都不匹配

//All Boxs
        $('input[type="text"]').each(function () {

            var text = $(this).prop("value")
            var textTest = /[a-zA-Z0-9'.\-]/g.test(text)

            if (!textTest && text != "") {
                allFieldsValid = false
                $(this).css("background-color", "rgba(224, 0, 0, 0.29)")
                alert("Invalid characters found in " + text + " \n\n Valid characters are:\n A-Z a-z 0-9 ' . -")
            }
            else {
                $(this).css("background-color", "#FFFFFF")
                $(this).prop("value", text)
            }
        });
编辑:添加代码

/^[a-zA-Z0-9'.-]+$/g

在第二种情况下,您的(
/[a-zA-Z0-9.-]/g
)正在工作,因为它与第一个字母匹配,所以要使其正确,您需要匹配整个字符串(使用
^
$
),并且还可以通过添加
+
*
(如果允许空字符串)来允许更多的字母.

问题重新标记后更新

你需要使用

var textTest = /^[a-zA-Z0-9'.-]+$/.test(text)
                                  ^^
注意没有
/g
修饰符和
+
量词。当您在
RegExp#test()
函数中使用的正则表达式中使用
/g
全局修饰符时,会出现这种情况

您可以在
/i
不区分大小写修饰符的帮助下将其缩短一点:

var textTest = /^[A-Z0-9'.-]+$/i.test(text)
另外,正如我在下面提到的,您不必转义字符类
[…]
末尾的
-
,但是如果不太懂正则表达式的开发人员稍后将修改模式,则建议保留转义

原始C#相关详细信息

好的,比如说,您使用的是
Regex.IsMatch(str,@“[a-zA-Z0-9.-]”
Regex.IsMatch
在字符串中搜索部分匹配项。因此,如果输入字符串包含ASCII字母、数字、
'
-
,则此操作将通过。因此,合乎逻辑的是,
aa@##
通过了这个测试,而
@#
没有通过

如果将第二个字符串用作
Regex.IsMatch(str,@“^[a-zA-Z0-9.-]$”
,则只有1个字符串(末尾带有可选换行符)会匹配为字符串开头的
^
匹配,
[a-zA-Z0-9.-]
匹配指定范围/集合中的1个字符,和
$
匹配字符串的结尾(或在最后换行之前)

因此,您需要一个量词(
+
来匹配1个或多个,或者
*
来匹配零个或多个出现次数)和锚点
\a
\z

Regex.IsMatch(str, @"\A[a-zA-Z0-9'.-]+\z")
                     ^^              ^^^
\A
匹配字符串的开头(始终),而
\z
匹配.NET中字符串的结尾。
[a-zA-Z0-9.-]+
将匹配1+个字符,这些字符可以是ASCII字母、数字、
-

请注意,字符类末尾的
-
不必转义(但如果其他开发人员以后必须修改模式,则可以保留
\-


在测试regexp时请小心。Regexr只支持JavaScript正则表达式语法。要测试.NET regexp,请使用或。

尝试使用此正则表达式。它匹配任何不属于允许的字符集的字符

/[^a-zA-Z0-9'.\-]+/g
试验


如果这是真的,那么为什么要使用模式分隔符呢?@KennethK。对不起,我猜c#与此无关,我添加了代码你不允许做什么?还是排除?好吧,将问号改为C#并显示您的代码可以让一切变得清晰。@NEO xx,只允许那些字符,(a-z)(a-z)(“.-)谢谢/^[a-zA-Z0-9'.\-]+$/在RegExr.com上失败,但在页面中似乎工作正常
>>regex = /[^a-zA-Z0-9'.\-]+/g
/[^a-zA-Z0-9'.\-]+/g
>>regex.test( "@###dsfdfjsakldfj")
true
>>regex.test( "dsfdfjsakldfj")
false