2013-08-06 4 views
0

Мое требование «Следующие символы не допускаются для имени значения:выяснить для специальных символов в Java

[ $ & + ,/: ; =? @ " < > # % { } | \ ~^[ ] ` ] ' 

я использовал что-то вроде этого,

Pattern pattern = Pattern.compile("[\"\\.&,@!?#%'$()/\\\\ \\-_<>]+$"); 
Matcher matcher = pattern.matcher(keyName); 

где KEYNAME является строка из который я ищу для присутствия специальных символов

Может ли кто-нибудь предоставить Regex для Java Pattern-Matcher? Заранее благодарен

+1

Узор вы используете имеет ** ** так много различных символов из ваших требований (взять '' -' и _' например). Почему это? – acdcjunior

+0

Регулярно не подходит для этого. Подсказка: 'String' имеет' .indexOf() '. – fge

ответ

3

Вместо соответствия многих специальных символов. Просто проверьте, имеет ли слово какой-либо не-буквенно-цифровой символ. Как это:

String term = "Hello-World"; 
    Pattern p = Pattern.Compile(".*\\W+.*"); 
    Matcher m = p.Matcher(term); 

Или вы также можете использовать:

String term = "Hello-World"; 
Pattern p = Pattern.Compile("[^A-Za-z0-9]"); 
Matcher m = p.Matcher(term); 
1

Просто введите символы внутри класса символов ([...]), экранировавшись при необходимости. Поскольку это звучит как школьное задание, я не собираюсь пить его вам. Обратите внимание, что вам может потребоваться удвоить количество символов. (Регулярное выражение требует \ быть экранированы, как \\, но, чтобы получить \\ в регулярных выражений в Java, вам нужно использовать "\\\\".)

Кстати, кажется, вы иметь пару символов ([ и ]) в списке дважды.

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