Java-作为[a-zA-z0-9]*传递的未知字符?
我不是正则表达式专家,但我需要解析一些我无法控制的输入,并确保过滤掉任何没有A-z和/或0-9的字符串 当我运行这个时Java-作为[a-zA-z0-9]*传递的未知字符?,java,regex,spaces,alphanumeric,Java,Regex,Spaces,Alphanumeric,我不是正则表达式专家,但我需要解析一些我无法控制的输入,并确保过滤掉任何没有A-z和/或0-9的字符串 当我运行这个时 Pattern p = Pattern.compile("^[a-zA-Z0-9]*$"); //fixed typo if(!p.matcher(gottenData).matches()) System.out.println(someData); //someData contains gottenData 某些空格+未知符号以某种方式通过过滤器(gott
Pattern p = Pattern.compile("^[a-zA-Z0-9]*$"); //fixed typo
if(!p.matcher(gottenData).matches())
System.out.println(someData); //someData contains gottenData
某些空格+未知符号以某种方式通过过滤器(gottenData为红色矩形):
如果你想知道,它也会显示文本,但不完全是这样
现在,我不介意[?],只要它还包含一些字符串
请帮忙
[编辑]从(非常大的)输入中可以看出,[?]要么是空白要么根本没有;可能存在某种编码问题,也可能与#文本节点(输入为xml)有关您必须将regexp更改为“^[a-zA-Z0-9]*$”以确保匹配整个字符串您必须将regexp更改为“^[a-zA-Z0-9]*$”为了确保匹配整个字符串,您的正则表达式中有一个错误:它应该是
[a-zA-z0-9]*
而不是[a-zA-z0-9]*
在正则表达式周围不需要^
和$
。
Matcher.matches()
始终匹配完整的字符串
String gottenData = "a ";
Pattern p = Pattern.compile("[a-zA-z0-9]*");
if (!p.matcher(gottenData).matches())
System.out.println("doesn't match.");
这会打印出“不匹配”。您的正则表达式中有一个错误:它应该是
[a-zA-z0-9]*
而不是[a-zA-z0-9]*
在正则表达式周围不需要^
和$
。
Matcher.matches()
始终匹配完整的字符串
String gottenData = "a ";
Pattern p = Pattern.compile("[a-zA-z0-9]*");
if (!p.matcher(gottenData).matches())
System.out.println("doesn't match.");
这打印的是“不匹配”。看起来应该是“a-zA-Z0-9”,而不是“a-zA-Z0-9”,尝试更正…看起来应该是“a-zA-Z0-9”,而不是“a-zA-Z0-9”,尝试更正…量词匹配“零或更多”,这意味着它将匹配一个不包含类中任何字符的字符串。尝试+量词,它表示“一个或多个”:
^[a-zA-Z0-9]+$
将只匹配由字母数字字符组成的字符串<代码>^.*[a-zA-Z0-9]+.*$将匹配包含一个或多个字母数字字符的任何字符串,尽管前导的。*将使其速度慢得多。如果您使用Matcher.lookingAt()
而不是Matcher.matches
,它将不需要完整的字符串匹配,并且您可以使用正则表达式[a-zA-Z0-9]+
,量词匹配“零或更多”,这意味着它将匹配不包含类中任何字符的字符串。尝试+量词,它表示“一个或多个”:^[a-zA-Z0-9]+$
将只匹配由字母数字字符组成的字符串<代码>^.*[a-zA-Z0-9]+.*$将匹配包含一个或多个字母数字字符的任何字符串,尽管前导的。*将使其速度慢得多。如果使用Matcher.lookingAt()
而不是Matcher.matches
,则不需要完整的字符串匹配,您可以使用正则表达式[a-zA-Z0-9]+
正确答案是上述答案的组合。首先,我想你想要的角色匹配是[a-zA-Z0-9]。请注意,A-z并不像您想象的那么糟糕,它包含了A到z之间ASCII范围内的所有字符,即字母加上一些额外的字符(特别是[,\,],^,,,`)
Martin提到的第二个潜在问题是,如果希望字符串仅由字母和数字组成,则可能需要输入起始限定符和结束限定符
最后,您使用*运算符,它表示0或更多,因此您可以匹配0个字符,并且匹配将返回true,因此您的模式将有效地匹配任何输入。你需要的是+量词。因此,我将提交您最可能寻找的模式:
^[a-zA-Z0-9]+$正确答案是上述答案的组合。首先,我想你想要的角色匹配是[a-zA-Z0-9]。请注意,A-z并不像您想象的那么糟糕,它包含了A到z之间ASCII范围内的所有字符,即字母加上一些额外的字符(特别是[,\,],^,,,`) Martin提到的第二个潜在问题是,如果希望字符串仅由字母和数字组成,则可能需要输入起始限定符和结束限定符 最后,您使用*运算符,它表示0或更多,因此您可以匹配0个字符,并且匹配将返回true,因此您的模式将有效地匹配任何输入。你需要的是+量词。因此,我将提交您最可能寻找的模式:
^ [AZ-ZO-9] +$
< P>有人考虑在ReXEX代码> [AZ-Z-Z09] *</代码>中添加空间。这应该匹配任何带有字符、数字和空格的普通文本。如果需要引号和其他特殊字符,也可以将它们添加到正则表达式中您可以在 快速测试正则表达式,是否有人考虑将空间添加到正则表达式> [AZ-ZO-9]*< /代码>。这应该匹配任何带有字符、数字和空格的普通文本。如果需要引号和其他特殊字符,也可以将它们添加到正则表达式中
您可以在处快速测试正则表达式您可以检查输入值是否包含字符串和数字?通过使用regex^[a-zA-Z0-9]*$ 如果您的值仅包含numberString,而不是其show匹配值,即rizz9、rizz9z 否则它将显示不匹配,即99z.,riz99.z,riz99.9 示例代码:
if(e.target.value.match('^[a-zA-Z0-9]*$')){
console.log('match')
}
else{
console.log('not match')
}
}
您可以检查输入值是否包含字符串和数字吗?通过使用regex^[a-zA-Z0-9]*$ 如果您的值仅包含numberString,而不是其show匹配值,即rizz9、rizz9z 否则它将显示不匹配,即99z.,riz99.z,riz99.9 示例代码:
if(e.target.value.match('^[a-zA-Z0-9]*$')){
console.log('match')
}
else{
console.log('not match')
}
}
如果OP可以使用字符类,
\w
可以用来避免这个狡猾的问题(尽管我认为这会将\u
添加到可接受的字符中,而这可能不适合当前的问题-不太确定)。对不起,伙计们,但两者都不确定^[