我的验证码是否正确?

时间:2014-12-29 10:01:53

标签: java validation

我想通过员工手机号码搜索对象员工的向量。要使手机号码有效,有两种不同的格式:

private String valm = "[79][9][0-9]{6}";
private String valmm = "[7][7][0-9]{6}";

我尝试验证用户输入的手机号码进行搜索,如果有效则在向量中搜索,否则会显示错误信息。但是,即使输入有效数字,也会始终显示错误消息。

case 3:
            System.out.println ("Enter Mobile Number of Employee to Search for: ");
            String m = sc.next();
            Employee e = null;
            if(temp.size() == 0)
                System.out.println ("Database is Empty! Please Add an Employee.");
            else if ((!(m.matches(valm))) | (!(m.matches(valmm))))
                System.out.println ("Invalid Mobile Number. Please Try Again.");
            else{
                for(int i = 0; i < temp.size(); i ++){
                    e = temp.elementAt(i);
                    if(e.getMob().equals(m)){
                        System.out.println(e.toString());
                        System.out.println ("Location: " + (i + 1));
                        exists = true;
                    }
                }
                if(exists != true)
                    System.out.println ("Employee Not Found!");
                System.out.println ("---------------------------------------------"); 
            }
            break;

对不起,如果我犯了愚蠢的错误,我仍然在学习并掌握Java。谢谢!

3 个答案:

答案 0 :(得分:1)

“|”是一个逻辑或操作,它将评估两个条件,如果它们中的任何一个满足,它将返回true。因此,通过模式匹配,假设您有两个电话号码:

79000000
77000000

这两个数字都有效,一个匹配你的regex1而不是另一个,所以!true | !false将被评估为true,因此如果阻塞它将进入并将导致错误消息。你所追求的可能是:

else if (!m.matches(valm) && !m.matches(valmm)) { //enter your phone number doesnt matches both regex

}

这里&amp;&amp;将使用正则表达式评估您的电话号码,并查看两者是否有效,然后不输入if条件,如果其中任何一个失败,则输入if条件。

答案 1 :(得分:0)

我的评论有帮助,所以我会写一个答案。

只需替换

else if ((!(m.matches(valm))) | (!(m.matches(valmm))))

else if (!m.matches(valm) && !m.matches(valmm))

else if (!(m.matches(valm) || m.matches(valmm)))

作为!A && !B <=> !(A || B)

这样,只有当m任何正则表达式匹配时,您的测试才会评估为真。

写作

else if ((!(m.matches(valm))) || (!(m.matches(valmm))))

您可以放心,至少有一个条件始终为真,如果mvalm匹配,则无法与valmm匹配。反之亦然。因此,此测试将始终返回true,并始终显示错误消息。

答案 2 :(得分:0)

另一种解决方案:

private final static String VALM = "[79]9[0-9]{6}";
private final static String VALMM = "77[0-9]{6}";

boolean isMobileNumber(String number) {
    return number.matches(VALM) || number.matches(VALMM);
}

可能更具可读性的正则表达式

private final static String VALM = "77[0-9]{6}|79[0-9]{6}|99[0-9]{6}";

boolean isMobileNumber(String number) {
    return number.matches(VALM);
}