PHP preg_match ile UTF Karakterler Eşleştirme: (* UTF8) Linux, Windows üzerinde çalışır ama

2 Cevap php

Ben bir kullanıcı adı denetlemek için basit bir düzenli ifade var:

preg_match('/(*UTF8)^[[:alnum:]]([[:alnum:]]|[ _.-])+$/i', $username);

Yerel testi (Windows 7 WAMP kullanarak), bu UTF karakterleri kullanarak adları için izin verir (örneğin é veya ñ gibi). Ben site aslında ev sahipliği yapacak sunucuda bu test etmek için hareket Ancak, ben şu uyarıyı alıyorum:

Uyarı: preg_match () [function.preg-match]: Derleme başarısız oldu: (* FİİL) tanınmaz hattında 12 / home / siteler / vgmusic.com / test / Çekirdek / Impl / FormElementValidator.php içinde 5 ofset

Ayrıca yerel bir Ubuntu yükleme üzerinde denedim ve aynı hatayı alıyorum var. Aslında, ben sadece benim yerel kalkınma ortamında bu işi gördüm. Tüm işletim sistemleri için çalışacak özel karakterler için izin vermek için bir yolu var mı?

2 Cevap

Onun tarafından karakterleri anlatarak deneyin Unicode character properties:

preg_match('/^\p{L}[\p{L} _.-]+$/u', $username)

Zaten bahsedilen /u parametresi ile çalışıyor olmuştu. Pencereler (PHP 5.2.16) üzerine, /u parametresini ekleyerek ben hala kullanıyor, unicode karakter içeren bir dize yakalamak değil ancak CentOS 5 ve PHP 5.2.16 üzerine, unicode karakter içeren bir dize yakalamak için iyi çalıştı .* (preg_match temelde yakalamak için başarısız oldu).

Uzun bir süre hiçbir şey değişti 'locale' ayarları ile karıştırmasını, hiçbir yerde aldıktan sonra, nihayet bulundu this site.

Ben bir rpm -Uvh sağlanan uygun sürümünü rpm, apache yeniden başlatılır yoktu ve aniden benim regexes amele büyük!

Ben başlangıçta UTF-8 desteğini almış olmasına rağmen ben de "Unicode özellikleri destekleyen ekler" güncelleştirilmiş rpm, yüklü kadar, benim regexes unicode dizelerini yakalayan değildi. UTF-8 desteği yeterliydi, ama görünüşe göre değil olurdu sahip düşündüm.