peronas
Goto Top

Regex Anzahl Character Nicht Anzahl Bytes

Guten Morgen zusammen,

und zwar habe ich eine Frage bzgl. RegEx/RegExp.
Ich habe einen regulären Ausdruck der wie folgt ausschaut:
"^[ -\.\s\w\(\)/]{1,35}$"
Nun habe ich bei Sonderzeichen für Russland oder auch bspw in Tschechien welches u.a. wie folgt aussehen könnte: ů

Leider kann ich dadurch nicht mehr auf die 35 Stellen abfragen. Ich vermute, dass es daran liegt, dass es sich hierbei um MultiByte-Character handelt.
Gibt es eine Möglichkeit dem Ausdruck zu sagen, dass er auf Anzahl Character und nicht Byte prüft?
Ich habe schonmal versucht selbst etwas herauszufinden. Leider finde ich jedoch immer nur PHP-Funktionen. Ich bräuchte dies jedoch in einem regulären Ausdruck.

Vielen Dank schonmal im Voraus.
Ich freue mich auf eure Antworten.

Mit freundlichen Grüßen
Peronas

Content-ID: 272277

Url: https://administrator.de/contentid/272277

Ausgedruckt am: 25.11.2024 um 08:11 Uhr

114757
114757 19.05.2015 aktualisiert um 12:46:28 Uhr
Goto Top
Moin,
\w enthält ja auch nur folgende Zeichenklassen:
A word character is a character from a-z, A-Z, 0-9, including the _ (underscore) character.
zumindest bei PCRE.
Und da ist dein genanntes Zeichen nunmal nicht enthalten. Da wirst du die erlaubten Unicode-Zeichen aus anderen Sprachen noch hinzufügen müssen, z.B. über die Hex-Codes \xHH

Gruß jodel32
Peronas
Peronas 19.05.2015 um 10:30:42 Uhr
Goto Top
Hallo Jodel32,

vielen Dank für die schnelle Antwort. Ich dachte, dass diese Zeichenklasse für sämtliche Encodings automatisiert (Regex-Intern) verändert wird.

Gibt es denn auch weitere Zeichenklassen für bspw. alle Zeichen des Encodings ISO8859-2 oder ISO8859-5? Das würde mir schon sehr weiterhelfen. Oder sollte ich die Prüfung dann lieber komplett entfernen.

Mittels Hex-Codes ist es leider nicht möglich, da die Zeichen vom Anwender eingegeben werden.

Liebe Grüße
Peronas
114757
Lösung 114757 19.05.2015 aktualisiert um 12:04:04 Uhr
Goto Top
Mittels Hex-Codes ist es leider nicht möglich, da die Zeichen vom Anwender eingegeben werden.
Doch, damit kannst du auch Ranges aus dem Unicode Zeichensatz angeben.

Du könntest das ganze ja auch anders angehen und ganze umdrehen und "alles außer bestimmten Sonderzeichen" matchen. Je nachdem was du genau vorhast.
Peronas
Peronas 19.05.2015 um 12:04:00 Uhr
Goto Top
Ah okay... das war die entscheidende Information die mir fehlte.... Super!
Ich habe nun bestimmte Hex-Bereiche für die verschiedenen Encodings (bzw. in meinem Fall Zeichensätze) freigegeben.
Dies funktioniert einwandfrei.
Vielen vielen Dank nochmal. face-wink
colinardo
Lösung colinardo 19.05.2015 aktualisiert um 13:01:56 Uhr
Goto Top
Hallo zusammen,
oder man nutzt alternativ den Ausdruck:
\p{L}
A character with the Unicode property “letter” (any kind of letter from any language) «\p{L}»

Grüße Uwe
Peronas
Peronas 19.05.2015 um 13:02:17 Uhr
Goto Top
Klingt auch super. Werde ich nachher auch nochmal testen. Vielen Dank. face-smile