2015-04-20 1 views
0

Как я могу сделать так, чтобы входной сигнал от пользователя принимался, только если формат соответствует «xxx-xxx-xxxx», где x может быть любым числом, но в этих группах должны присутствовать только цифры и тире , В принципе, он должен принимать номера телефонов. Сейчас у меня есть:Как принимать только конкретный формат чисел от пользователя на Java?

Scanner input = new Scanner(System.in); 
String in = input.next(); // Stores user input as a string 

if (in.contains("[a-zA-Z]") == false && in.length() == 12) { 
    System.out.println("Number Accepted"); 
} else { 
    System.out.println("Number Rejected"); 
} 

В настоящее время, он отклонит числа, которые больше или меньше, чем 12 символов, но он будет принимать все, что 12 символов, даже если у него есть письмо. У меня также нет решения для правильной группировки чисел с тире, поскольку пользователь должен иметь возможность вводить только 3 числа, затем тире, затем еще 3 числа, затем тире, а затем, наконец, 4 числа.

+0

Вы пытаетесь проверить номер телефона, номер социального страхования в или что-то совсем другое? – Makoto

+0

'String # contains()' принимает последовательность символов, а не регулярное выражение. Ваш метод проверит наличие подстроки «[a-zA-Z]». –

+1

Следующее регулярное выражение должно делать трюк: '/^\ d {3} - \ d {3} - \ d {4} $ /'. –

ответ

1

Вы можете использовать Pattern применить регулярное выражение:

Pattern pattern = Pattern.compile("^\d{3}-\d{3}-\d{4}$"); 
Scanner input = new Scanner(System.in); 
String in = input.next(); // Stores user input as a string 

if (pattern.matcher(in).matches())) { 
    System.out.println("Number Accepted"); 
} else { 
    System.out.println("Number Rejected"); 
} 
+1

Нет необходимости в '^' и '$': 'matches()' проверяет целую строку, противоположную 'find()' –

+1

Или просто 'in.matches (regex)'. – Bubletan

Смежные вопросы