Frage

Ich bin mit dem regulären Ausdruck unter auszusondern jegliche nicht-lateinischen Zeichen. Als Ergebnis fand ich, dass, wenn ich eine Zeichenfolge größer als 342 Zeichen verwenden, schlägt die Funktion fehl, alles Abbrüchen und die Website-Verbindung zurückgesetzt wird.

Ich narroed es in das Verzeichnis \ p nach unten {P} Unicode-Zeichen-Eigenschaft, die alle Satzzeichen übereinstimmt.

Wer weiß / sehen, wo das Problem liegt, genau?

preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');

War es hilfreich?

Lösung

If you're "weeding out" non-Latin characters, why not just do this:

preg_replace('/[^\p{Latin}]+/u', '', $s)

EDIT: Okay, so you're trying to validate the input. I was going to say, use this:

preg_match('/^[\p{Latin}]+$/u', $s)

...but it turns out that only matches Latin letters. I was thinking of Java's undocumented shorthand, \p{L1}, which matches everything in the Latin1 (ISO-8859-1) character set, but in PHP you have to spell it out:

preg_match('/^[\x00-\xFF]+$/u', $s)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top