Java中的字符串验证帮助

时间:2015-02-26 19:17:35

标签: java

我遇到字符串验证问题。我需要测试参数是否包含字符串,所以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") 结果是: 未知, 空

5 个答案:

答案 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;
}