2014-12-29 1 views
0

Я хочу найти вектор объекта Сотрудник сотрудника номер мобильного телефона. Для мобильного телефона, чтобы быть действительным, существует два разных формата:Правильный ли мой код проверки?

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

@TheLostMind На самом деле, должно быть '' &&. –

+0

@ X.L.Ant Я попробовал это с '||' изначально, но это не решило его. Почему это должно быть '&&', если только один аргумент должен быть действительным? –

+2

Причина, если значение соответствует первому тесту, оно никогда не будет соответствовать другому, поэтому сообщение об ошибке. Ваше значение должно соответствовать NONE из них как недопустимое число. –

ответ

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 не соответствует any regexes.

Написав

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

Вы уверены, что по крайней мере один из условий всегда будет верно, как если бы m соответствует valm, он не может соответствовать valmm. Обратное тоже верно. Поэтому этот тест всегда возвращает true, и сообщение об ошибке всегда будет отображаться.

1

"|" является логическим или операционным, который будет оценивать оба условия, и если кто-либо из них встретится, он вернет true. Таким образом, с помощью сопоставления с образцом, скажем, у вас есть два телефонных номера:

79000000 
77000000 

Оба эти цифры действительны, один соответствует вашим regex1, а не другой, так верно | ! false будет оцениваться как истинный, и, следовательно, он будет вводиться, если блок и приведет к сообщению об ошибке. Возможно whta вы после:

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

} 

Здесь & & оценят ваш номер телефона как с регулярным выражением и будут видеть, если оба являются действительными, тем Dont введите если условие, и если какие-либо из них терпит неудачу, то введите, если условие ,

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); 
}