我遇到字符串验证问题。我需要测试参数是否包含字符串,所以a-z + 1-9我该怎么做?
public void setName(String one) {
if(one.contains("[a-zA-Z]")) {
this.name = one;
}
else {
System.out.println("unknown");
}
}
这是预期输出我将其设为ok.setName("a")
结果是:
未知,
空
答案 0 :(得分:2)
contains()
不会使用正则表达式。
您正在寻找matches()
您的案例示例(至少有一个除零以外的字母数字)
部分匹配
one.matches(".*[a-zA-Z1-9]+.*")
如果您想要完全匹配,那么:
one.matches("[a-zA-Z1-9]+");
答案 1 :(得分:1)
而不是使用.contains()
- 它搜索String是否为子集。您应该使用Regex
来测试模式匹配。
尝试将if
更改为以下内容:
if (one.matches("[a-zA-Z1-9]+")
答案 2 :(得分:1)
您可以使用以下格式检查字符串是否包含字母和数字。字符串包含方法检查,如果字符串包含特定的子字符串/字符,那么您将需要使用正则表达式:
匹配中的正则表达式
^[-a-zA-Z0-9._]+
或
^[-\\w.]+
两者都能正常运作。
public void setName(String one) {
if(one.matches("^[-\\w.]+")){
System.out.println(one);
}
else
System.out.println("unknown");
}
答案 3 :(得分:1)
如果您只对ASCII字母数字字符感兴趣,请使用"^[a-zA-Z0-9]*$"
中的String.matches(regex)
,如果是字母数字则返回true,否则返回false。例如:
public void setName(String one) {
this.name = one.matches("^[a-zA-Z0-9]*$") ? one : "UNKNOWN";
System.out.println(String.format("name: %s", name));
}
为了使其兼容unicode,您也可以"^[\pL\pN]+$"
使用String.matches(regex)
,其中\pL
代表任何字母
\pN
代表任何数字。
答案 4 :(得分:0)
对我而言,可读性始终是首要目标,而且简洁并不总是等同于可读性(正则表达式非常简洁)
我只是手动完成,但无论您选择哪种解决方案,请将其封装到单独的(可读)方法调用中:
public boolean isStringAlphaNumeric(String test) {
for(char c : test.toCharArray())
if(!Character.isAlphabetic(c) || !Character.isNumeric(c))
return false;
return true;
}