سؤال

أنا أستخدم التعبير العادي أدناه للتخلص من أي أحرف غير لاتين. نتيجة لذلك ، وجدت أنه إذا استخدمت سلسلة أكبر من 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top