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-Key: 272277

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

Printed on: April 16, 2024 at 13:04 o'clock

Mitglied: 114757
114757 May 19, 2015 updated at 10:46:28 (UTC)
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
Member: Peronas
Peronas May 19, 2015 at 08:30:42 (UTC)
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
Mitglied: 114757
Solution 114757 May 19, 2015 updated at 10:04:04 (UTC)
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.
Member: Peronas
Peronas May 19, 2015 at 10:04:00 (UTC)
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
Member: colinardo
Solution colinardo May 19, 2015 updated at 11:01:56 (UTC)
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
Member: Peronas
Peronas May 19, 2015 at 11:02:17 (UTC)
Goto Top
Klingt auch super. Werde ich nachher auch nochmal testen. Vielen Dank. face-smile