2017-11-15 2 views
1

ich einen regulären Ausdruck gesucht, die Arabisch oder Englisch Namen übereinstimmen würden, dass nur Zeichen (Buchstaben) und Räume erlauben würde, fand ich einen JavaScript RegEx dass der Job nichtRegular Expression Arabisch oder Englisch Namen übereinstimmen

var regex = /^(?:[a-zA-Z\s\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDCF\uFDF0-\uFDFF\uFE70-\uFEFF]|(?:\uD802[\uDE60-\uDE9F]|\uD83B[\uDE00-\uDEFF])){0,30}$/; 

ich baute es zu PCRE-konform als

/^(?:[a-zA-Z\s\x{600}-\x{6FF}\x{750}-\x{77F}\x{8A0}-\x{8FF}\x{FB50}-\x{FDCF}\x{FDF0}-\x{FDFF}\x{FE70}-\x{FEFF}]|(?:\x{D802}[\x{DE60}-\x{DE9F}]|\x{D83B}[\x{DE00}-\x{DEFF}])){0,70}$/u 

aber wenn ich versuche,

var_dump(preg_match('/^(?:[a-zA-Z\s\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{08A0}-\x{08FF}\x{FB50}-\x{FDCF}\x{FDF0}-\x{FDFF}\x{FE70}-\x{FEFF}]|(?:\x{D802}[\x{DE60}-\x{DE9F}]|\x{D83B}[\x{DE00}-\x{DEFF}])){0,70}$/u', 'Foo Bar')); 

OR

var_dump(preg_match('/^(?:[a-zA-Z\s\x{600}-\x{6FF}\x{750}-\x{77F}\x{8A0}-\x{8FF}\x{FB50}-\x{FDCF}\x{FDF0}-\x{FDFF}\x{FE70}-\x{FEFF}]|(?:\x{D802}[\x{DE60}-\x{DE9F}]|\x{D83B}[\x{DE00}-\x{DEFF}])){0,70}$/u', 'Foo Bar')); 

es

PHP Warnung zurückgibt: preg_match(): Kompilation fehlgeschlagen: Punkt Unicode unzulässigen Code (> = 0xD800 & & < = 0xDFFF) bei on line-Offset 127 in PHP-Shell-Code 1 bool (falsch)

Bitte helfen Sie diese Warnung zu lösen!

Jede Hilfe wird geschätzt! Danke!

+3

Warum nicht nur '\ p {Arabic}'? – revo

+0

Ersetzen Sie '(?: \ UD802 [\ UDE60- \ uDE9F] | \ uD83B [\ uDE00- \ uDEFF]]' mit '[\ x {10A60} - \ x {10A9F} \ x {1EE00} - \ x { 1EEFF}] ', und der Ausdruck wird aussehen wie ['/^ [a-zA-Z \ s \ x {600} - \ x {6FF} \ x {750} - \ x {77F} \ x {8A0} - \ x {8FF} \ x {FB50} - \ x {FDCF} \ x {FDF0} - \ x {FDFF} \ x {FE70} - \ x {FEFF} \ x {10A60} - \ x {10A9F} \ x {1EE00} - \ x {1EEFF}] {0,70} $/u'] (https://regex101.com/r/CkX6Fn/1) –

+0

@revo: Sie meinten [a-zA-Z \ s \ p {Arabisch}]? – linktoahref

Antwort

1

Wenn Sie mit den Buchstaben Hauptsprache 28 Zeichen meinen, müssen Sie nicht einmal eine codepunktbasierte Zeichenklasse konstruieren (Sie können sie durch manuelle Eingabe von Buchstaben erstellen!).

Aber wenn Sie meinen Arabic (0600 - 06FF, Zeichen), dann wieder so lange Zeichenklasse bieten nicht, was Sie sich wünschen.

Auf jeden Fall können Sie mit diesem gehen:

/^(?!.*\d)[a-z\p{Arabic}\s]+$/iu 

Hinweis: Sie können für verschiedene Blöcke in arabischen Schrift here überprüfen mögen.

+1

Vielen Dank! Deine Antwort hat mein Problem gelöst! – linktoahref