2017-01-10 8 views
0

У меня есть этот код (ОПЦИЯ1):Как я могу проверить, является ли ввод пользователем слова, а не особым символом (* !?)?

if(!firstName.getText().toString().matches("/w+/")){ 
      error = error + getString(R.string.error_first_name_incorrect_resgister_activity) +"\n"; 

И у меня есть этот код (option2), что не делает то, что, как ожидается, (позволяет пользователю только вставить эти символы)

if(!lastName.getText().toString().matches("/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.\'-]+$/u")){ 
      error = error + getString(R.string.error_last_name_incorrect_resgister_activity) +"\n"; 
+4

если вход 'длина' больше 1, очевидно, это не один символ. – Null

+0

Чувак Я хочу проверить, если пользователь вводит какие-либо * ?! – Jose

+0

@Null абсолютно прав! Используйте метод String.length(), чтобы проверить это. – Sasha

ответ

1

Вы можете использовать шаблон (?ui)\w+ для соответствия символам Unicode

Java Pattern

0
 Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE); 
     Matcher m = p.matcher(your_text_string); 
     boolean b = m.find(); 

     if (b) { 
      // error occurred special chars 
     } 
+1

печати does't матч письма как 'çéèàù' – Toto

+0

печати оленья кожа дать ответ-вопрос. Для критики или Разъяснение запроса от автора, оставьте комментарий ниже их место. - [Из обзора] (/ обзор/низкие качество косяков/14,841,236) – Joseph

+0

@ Джозефа, Задаваемые вопросы найти, заместитель спецсимволов вновь были скорректированы на немецком язык. – W4R10CK

0

Сначала, как Null, вы можете просто проверить длину строки. Как это:

if(firstName.getText().toString().length < 5){ 
      error = error + getString(R.string.error_first_name_incorrect_resgister_activity) 

или вы можете также изменить ваше регулярное выражение, так что пользователь должен дать по крайней мере 5 букв с помощью квантора ({5,}). Тогда ваш код будет выглядеть следующим образом:

if(!lastName.getText().toString().matches(/\w{5,}/u)){ 
     error = error + getString(R.string.error_last_name_incorrect_resgister_activity) +"\n"; 

или

if(!lastName.getText().toString().matches(/^[a-zA-Z\-_ ’'‘ÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħ‌​įƙłøơşșţțŧųưy̨ƴÁÀÂÄǍ‌​ĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐ‌​ÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔá‌​àâäǎăāãåǻąæǽǣɓćċĉčçď‌​ḍđɗðéèėêëěĕēęẹǝəɛġĝǧ‌​ğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴ‌​ĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖ‌​ǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐ‌​ĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ň‌​ñņŋóòôöǒŏōõőọøǿơœŔŘŖ‌​ŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨ‌​ŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽ‌​Ẓŕřŗſśŝšşșṣßťţṭŧþúùû‌​üǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳ‌​ỹƴźżžẓ]$/)){ 
      error = error + getString(R.string.error_last_name_incorrect_resgister_activity) +"\n"; 
0

Я хотел бы предложить использовать Character.isLetter(c), как показано ниже:

char[] charArray= lastName.getText().toCharArray(); 

    for(Character c :charArray){ 
     if(!Character.isLetter(c)){ 
      error = error + getString(R.string.error_last_name_incorrect_resgister_activity) +"\n"; 
      break; 
     } 
    } 

Тестирование:

char c1= '-'; 
char c2= 'A'; 
char c3= 'ę'; 
char c4= 'ð'; 
char c5= 'ã'; 
boolean flag1 =Character.isLetter(c1); 
boolean flag2 =Character.isLetter(c2); 
boolean flag3 =Character.isLetter(c3); 
boolean flag4 =Character.isLetter(c4); 
boolean flag5 =Character.isLetter(c5); 
System.out.println(flag1); 
System.out.println(flag2); 
System.out.println(flag3); 
System.out.println(flag4); 
System.out.println(flag5); 

Результат:

false 
true 
true 
true 
true 

Edit:

Кроме того, если вам необходимо рассмотреть цифры в качестве допустимых символов (не специальных символов), то вам нужно использовать Character.isDigit(c):

if(!Character.isLetter(c) && !Character.isDigit(c)) 
+0

OP хочет разрешить некоторые символы, такие как: '\ - – Toto

+0

' ли ИГРА НЕСКОЛЬКО ОТВЕТОВ Это в-вопрос.? – Null

+1

Конечно, смотрите на вариант 2. Это – Toto