我有一个无法正常工作的标准表达式。 如果字符串在字符串中的任何位置包含无效字符,则此表达式应该捕获。它在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)
}
});
编辑:添加代码
答案 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.net或RegexHero。
答案 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