2013-06-07 19 views
7

Ich habe diese regex:Regex mit lateinischen Schriftzeichen

if (cadena.matches("^[a-zA-Z ]+$")) return true; 

Es ist von A bis Z als Klein- und Groß akzeptieren. Akzeptiert auch Leerzeichen.

Aber das funktioniert nur für Englisch. Zum Beispiel haben wir auf Katalanisch den Charakter "ç". Wir haben auch Zeichen mit 'á', oder 'à', etc.

Haben einige Google und ich keine Möglichkeit gefunden, dies zu tun.

Ich fand heraus, dass ich für UTF-8 filtern kann, aber das würde Zeichen akzeptieren, die nicht wirklich ein Buchstabe sind.

Wie kann ich das umsetzen?

+0

Werfen Sie einen Blick auf [Unicode-Blöcke] (http://jregex.sourceforge.net/gstarted.html#appendix-c). –

+0

Weiß nicht wenn das hilft: http://stackoverflow.com/questions/896374/what-is-the-regular-expression-for-a-spanish-word relevanter: http://stackoverflow.com/questions/6548815/ how-do-i-match-latin-Unicode-Zeichen-in-coldfusion-or-java-regex? rq = 1 – wazy

+0

Werfen Sie auch einen Blick auf [stackoverflow.com/questions/9499851/...](http:/ /stackoverflow.com/questions/9499851/regex-for-validating-alphabetics-and-numbers-in-the-localized-string/9500409#9500409) – stema

Antwort

16

verwenden regex:

[\p{L}\s]+ 

\p{L} jeden Unicode Brief.

fiddle.re Demo.

+1

Trifft das nicht auch nicht-lateinische Zeichen, was nicht genau das ist, wonach das OP gesucht hat (obwohl sie diese Antwort akzeptiert haben)? Es entspricht zum Beispiel '안녕'. Es scheint, dass '\ p {IsLatin}' besser passt, wenn Sie speziell lateinische Zeichen ([ref] (http://docs.oracle.com/javase/8/docs/api/java/util/regex) anpassen möchten) /Pattern.html)). –

+0

@NickChammas: op hat explizit alle Unicode-Buchstaben gesucht. – mvp

+0

An diesem Punkt 3 Jahre nach der Tatsache, ich denke, es ist ein strittiger Punkt, aber der OP-Titel und Verwendungszweck der Übereinstimmung mit dem katalanischen Alphabet schlagen vor, sie wollen nur lateinische Zeichen und nicht alle Unicode (die andere Alphabete, wie Koreanisch enthalten würde) . Ich sehe nicht, wo das OP explizit "irgendeinen Unicode-Buchstaben" abgleichen wollte. Aber ich habe diese Antwort trotzdem aufgewertet, weil sie hilfreich war. Ich hoffe, dass mein früherer Kommentar anderen hilft, die wie ich auf diese Seite kamen, um nach einer Möglichkeit zu suchen, nur lateinische Zeichen und nicht Unicode zu finden. –

0

Betrachten Sie die documentation und verwenden Sie eine Klasse (z. B. \p{Latin1Supplemental}).

+2

Diese Dokumentation Seite hat nicht "Latin1Supplemental" erwähnt nirgendwo. Sogar googeln nach 'Latin1Supplemental' auf' site: oracle.com' findet es nicht. Was gibt? – mvp

+0

Es könnte etwas anderes genannt werden. Bitte überprüfen Sie die Dokumentation zu 'Character.UnicodeBlock'. Es gibt eine Konstante namens 'LATIN _! _ SUPPLEMENTAL', deren Name für den Namen' \ p {} 'verwendet werden könnte. –

Verwandte Themen