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

时间:2016-06-16 18:34:55

标签: 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 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)
            }
        });

编辑:添加代码

3 个答案:

答案 0 :(得分:2)

问题重新标记后的更新

您需要使用

var textTest = /^[a-zA-Z0-9'.-]+$/.test(text)
                                  ^^

请注意缺少/g修饰符和+量词。在/g函数中使用的正则表达式中使用RegExp#test()全局修饰符时有known issues

您可以借助/i不区分大小写的修饰符来缩短它:

var textTest = /^[A-Z0-9'.-]+$/i.test(text)

另外,正如我在下面提到的那样,你不必在角色类-的末尾转义[...],但如果稍后修改模式,建议保持转义。不那么正则表达的开发人员。

原创C#-RELATED DETAILS

好吧,比如说,你正在使用Regex.IsMatch(str, @"[a-zA-Z0-9'.-]")Regex.IsMatch在字符串中搜索部分匹配。因此,如果输入字符串包含ASCII字母,数字'.-,则会传递。因此,aa@#@#通过此测试是合乎逻辑的,而@#@#则没有。

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

因此,您需要量词($匹配1个或更多,或+匹配零个或多个匹配项)和锚点*\A:< / p>

\z

Regex.IsMatch(str, @"\A[a-zA-Z0-9'.-]+\z") ^^ ^^^ 匹配字符串的开头(始终),\A匹配.NET中字符串的最后一端。 \z将匹配1个字符,包括ASCII字母,数字,[a-zA-Z0-9'.-]+'.

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

请注意测试正则表达式的位置。 Regexr仅支持JavaScript正则表达式语法。要测试.NET regexp,请使用RegexStorm.netRegexHero

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

的字符
Exception in thread "main" com.datastax.driver.core.exceptions.ReadFailureException: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)
at com.datastax.driver.core.exceptions.ReadFailureException.copy(ReadFailureException.java:85)
at com.datastax.driver.core.exceptions.ReadFailureException.copy(ReadFailureException.java:27)
at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:37)
at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:245)
at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:63)
at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:39)
...
Caused by: com.datastax.driver.core.exceptions.ReadFailureException: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)
at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:76)
at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:37)
at com.datastax.driver.core.Message$ProtocolDecoder.decode(Message.java:266)
at com.datastax.driver.core.Message$ProtocolDecoder.decode(Message.java:246)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)

测试

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