Java-作为[a-zA-z0-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

我不是正则表达式专家,但我需要解析一些我无法控制的输入,并确保过滤掉任何没有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
某些空格+未知符号以某种方式通过过滤器(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
添加到可接受的字符中,而这可能不适合当前的问题-不太确定)。对不起,伙计们,但两者都不确定^[