我想通过员工手机号码搜索对象员工的向量。要使手机号码有效,有两种不同的格式:
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。谢谢!
答案 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))))
您可以放心,至少有一个条件始终为真,如果m
与valm
匹配,则无法与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);
}