Java正则表达式:检查word是否具有非字母数字字符

Java正则表达式:检查word是否具有非字母数字字符,java,regex,Java,Regex,这是我用来确定单词是否包含任何非字母数字字符的代码: String term = "Hello-World"; boolean found = false; Pattern p = Pattern.Compile("\\W*"); Matcher m = p.Matcher(term); if(matcher.find()) found = true; 我想知道正则表达式是否错误。我知道“\W”将匹配任何非单词字符。知道我遗漏了什么吗???将正则表达式更改为: .*

这是我用来确定单词是否包含任何非字母数字字符的代码:

  String term = "Hello-World";
  boolean found = false;
  Pattern p = Pattern.Compile("\\W*");
  Matcher m = p.Matcher(term);
  if(matcher.find())
    found = true;
我想知道正则表达式是否错误。我知道
“\W”
将匹配任何非单词字符。知道我遗漏了什么吗???

将正则表达式更改为:

.*\\W+.*

这是您要查找的表达式:

“^[a-zA-Z0-9]+$”


当它的计算结果为false时,这意味着不匹配,因此这意味着您找到了所需的内容。

当我必须执行相同的操作时,我使用的正则表达式是“(\w)*”,这就是我使用的。不确定capitol w是否相同,但我也使用了括号

问题在于
“*”
<代码>“*”匹配零个或多个字符。您希望至少匹配一个非单词字符,因此必须使用
'+'
作为数量修饰符。因此,match
\W+
(大写字母W表示非单词)

方法的大小写不正确

matcher声明为m,但用作matcher

重复应该是“一个或多个”+而不是“零个或多个”* 这是正确的:

String term = "Hello-World";
boolean found = false;
Pattern p = Pattern.compile("\\W+");//<-- compile( not Compile(
Matcher m = p.matcher(term);  //<-- matcher( not Matcher
if(m.find()) {  //<-- m not matcher
    found = true;
}

:)

您的表达式没有考虑可能的非英语字母。它也比需要的更复杂。除非您使用Regex的原因不是出于需要(如您的教授告诉您这样做),否则您最好使用:

boolean found = false;
for (int i=0;i<mystring.length();++i) {
  if (!Character.isLetterOrDigit(mystring.charAt(i))) {
    found=true;
    break;
  }
}
boolean-found=false;

对于(int i=0;i现在是2016年或更晚,您应该考虑来自其他字母的国际字符串,而不仅仅是拉丁语。在这种情况下,经常引用的
[^a-zA-Z]
将不匹配。现在Java中有更好的方法:

[^\\p{IsAlphabetic}^\\p{IsDigit}]

请参阅(部分“Unicode脚本、块、类别和二进制属性的类”)。我还发现了一些有用的内容。

如果您可以使用ApacheStringUtils,那么就简单如下

if (value.matches(".*[^a-zA-Z0-9].*")) { // tested, seems to work.
    System.out.println("match");
} else {
    System.out.println("no match");
}
StringUtils.isAlphanumeric(inp)

别忘了字母数字“^[a-zA-Z0-9]+$”
这与数字不匹配!对不起,我的英语可能不正确,但如果他想要alfanumeric,最好的方法就是如vbence所说的那样。我刚刚更新了答案。这是一个很好的观点。在这种情况下,alex给出的答案会更好。但是如果这是一个web应用程序,我们也可能会有编码问题。例如,汉字s、 我认为一个简单的正则表达式不能解决这个问题。让我们想象它是英语:)它们是不同的
\W
(大写字母)是
\W
的反义词-它将匹配
\W
字符类不匹配的任何字符。IsleterOrdigit()方法能否识别中文、俄文、日文、印文。。。角色?“我不认为它能。”乔·拉森很酷,我没有know@sfrj-java.lang.Character提供了大量有用的Unicode感知实用程序方法,例如能够获取Unicode类别(Character.getType)。这就是我构建JavaScript unicode字符util的前提,它尽可能多地从Java中挖掘这种优点,并使其在JavaScript中可用。
StringUtils.isAlphanumeric(inp)