2015-11-09 3 views
1

Я хочу исключить любые символы, кроме букв и цифр, но когда я запускаю свою программу независимо от того, что я ввожу, я всегда вхожу в цикл while.Почему выражение регулярного выражения соответствует каждому символу?

System.out.println("Please enter the name of the next dancer"); 

while(!scan.hasNext("^[a-z0-9]+$/i")) 
{ 

    System.out.println("Please ensure you only enter letters of the alphabet and numbers bewteen 0 and 9"); 
    scan.nextLine(); 

} 
arrCelebs[celeb] = scan.next(); 

К примеру я ввожу «а» я - System.out.println («Пожалуйста, введите имя следующего танцора»);

И то же самое, если я введу "%"

+0

Просто семантика, но пока мы говорим о десятичных числах, есть ли другие числа, кроме чисел от 0 до 9? :) –

+0

нет целых чисел –

ответ

2

/i не заставит его проигнорировать случай в Java, используйте:

"(?i)^[a-z0-9]+$" 

Или просто:

"^[a-zA-Z0-9]+$" 

Другая проблема ваш подход заключается в том, что по умолчанию ^ соответствует началу текста, а не началу строки, поэтому, если ваш первый вход не соответствует регулярному выражению, то следующий не может совпадать с ним, поскольку он не будет отображаться начало текста. Поэтому либо привяжите якорь к началу строки с многострочным флагом (?m), либо просто удалите ^.

+0

Хорошо спасибо, но я все равно вхожу в цикл while независимо от того, что я ввожу. –

+0

Как вы его тестируете? '! scan.hasNext ("^[a-zA-Z0-9] + $ ")' return 'false', если вы введете' a' – anubhava

+0

@JerryMurphy Удалите '^' anchor из вашего регулярного выражения. Если ваше первое значение будет некорректным, то оно, конечно же, не будет в начале всего текстового сканера, который до сих пор читал, что означает, что '^' предотвращает совпадение любого ввода. Вы также можете добавить многолистный флаг в свое регулярное выражение, чтобы этот якорь представлял начало строки *. – Pshemo

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