تعبيرات Unicode العادية - تفشل في 343 حرفًا
-
02-10-2019 - |
سؤال
أنا أستخدم التعبير العادي أدناه للتخلص من أي أحرف غير لاتين. نتيجة لذلك ، وجدت أنه إذا استخدمت سلسلة أكبر من 342 حرفًا ، فإن الوظيفة تفشل ، ويتم إحباط كل شيء ، ويتم إعادة تعيين اتصال الموقع.
لقد قمت بتثبيتها إلى خاصية حرف unicode p {p} ، والتي تطابق أي حرف علامات الترقيم.
لا أحد يعرف/يرى أين تكمن المشكلة ، بالضبط؟
preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
المحلول
إذا كنت "تتفوق على" الشخصيات غير اللاتينية ، فلماذا لا تفعل هذا فقط:
preg_replace('/[^\p{Latin}]+/u', '', $s)
تعديل: حسنًا ، أنت تحاول ذلك التحقق المدخل. كنت سأقول ، استخدم هذا:
preg_match('/^[\p{Latin}]+$/u', $s)
... ولكن اتضح أن ذلك يطابق فقط اللاتينية حروف. كنت أفكر في اختصار جافا غير الموثقة ، \p{L1}
, ، الذي يطابق كل شيء في مجموعة الأحرف Latin1 (ISO-8859-1) ، ولكن في PHP ، عليك توضيحها:
preg_match('/^[\x00-\xFF]+$/u', $s)