2016-05-16 13 views
1

Das ist mein regex ist - “[\\w\\d\\p{Punct}]+”\ p {} Punct Verhalten in meiner android app

Es ist sehr seltsames Verhalten von \\p{Punct} in meiner app. die Dokumentation nach (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html):

\ p {Punct} - Punctuation: Ein "# $% &‚() * +, -/:; < => @ [] ^.? _` {|} ~

Aber in meiner app dieses Tag auslässt immer dieses Zeichen: „$“, „+“, „<“, „>“, „=“, „^“, „`“ „|“, „~“

abc!d => true 
abc#d => true 
abd$d => false 
abc<>d = > false 

usw.

Ich versuchte

Pattern pattern = Pattern.compile("[\w\d\p{Punct}]+", Pattern.UNICODE_CASE); 

Es gab keinen Effekt zu verwenden.

Anny Vorschläge, was ich falsch mache?

S.S .: Ich benutze TextWatcher dafür. Ich mache es wie folgt aus:

TextWatcher textWatcher = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // I am checking it here 
      // if if(!s.toString().matches("[\\w\\d\\p{Punct}]+")) => do something 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 

     

}; 

Als ich das TextWatcher-MyEditText hinzugefügt:

myEditText.addTextChangedListener(textWatcher); 
+0

@anubhava Ich habe es versucht, aber ohne irgendwelche Auswirkungen. – Alex

Antwort

0

Das Problem ist, dass \p{Punct} die [:punct:] Zeichenklasse Symbole POSIX übereinstimmt, die auch Symbole enthalten, \p{S}.

Um zu vermeiden, die Saiten ohne Symbole Ihnen passende benötigen:

"^[\\w\\p{P}]+$" 

Beachten Sie auch, dass auf Android, \w, \p{P} und \p{S} standardmäßig Unicode-aware sind. sowohl \w und \d in die gleiche Zeichenklasse

Besdides Spieler \w bereits Ziffern, keinen Punkt gibt es das Hinzufügen [...].

+0

Danke, ja, es funktioniert! Aber die Frage ist, wie man die Schnur nicht nur mit englischen Buchstaben vergleicht? So etwas wie "[a-zA-Z \\ p {P} \\ p {S}] +"? – Alex

Verwandte Themen