2017-01-10 4 views
0

Ich habe diesen Code (Option1):Wie kann ich überprüfen, ob die Benutzereingabe ein Wort und kein Sonderzeichen wie (* !?) ist?

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

Und ich habe diesen Code (Option2), das tun tut, was erwartet wird (dem Benutzer erlauben, nur die Zeichen einfügen)

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

Wenn die Eingabe Länge ist mehr als 1 offensichtlich ist es kein einziges Zeichen. – Null

+0

Dude Ich möchte überprüfen, ob der Benutzer irgendwelche * *? – Jose

+0

@Null ist absolut richtig! Verwenden Sie die String.length() -Methode, um dies zu überprüfen. – Sasha

Antwort

1

Sie können das Muster (?ui)\w+ verwenden, um es mit den Unicode-Symbolen

abzugleichen

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

Dies entspricht nicht Buchstaben wie 'çéèàù' – Toto

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/14841236) – Joseph

+0

@Joseph, die Frage wird gefragt, die speziellen Zeichen wieder zu finden es wurde auf Deutsch korrigiert. – W4R10CK

0

Zuerst als Null vorgeschlagen, können Sie einfach die Zeichenfolge Länge überprüfen. Wie folgt aus:

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

oder Sie können auch Ihre Regex ändern, damit der Benutzer atleast 5 Buchstaben mit einem Quantor geben hat ({5,}). Dann würde der Code wie folgt aussehen:

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

oder

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

Ich würde vorschlagen, Character.isLetter(c) zu verwenden, wie unten:

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

Testing:

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

Ergebnis:

false 
true 
true 
true 
true 

Edit:

Auch wenn Sie Ziffern als gültige Zeichen (nicht um ein Sonderzeichen) beachten müssen, dann müssen Sie Character.isDigit(c) verwenden:

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

OP möchte einige Zeichen wie: ',. \ '-' – Toto

+0

erlaubt das OP in der Frage erwähnt? – Null

+1

Sicher, siehe Option 2. – Toto

Verwandte Themen