PHP'de preg_match kullanırken “bilinmeyen 'g' in…” değiştiricisi?


94

Kullanmaya çalıştığım normal ifade bu:

/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim

Bu sitede buldum ve orada denediğimde harika çalışıyor. Ancak koduma yerleştirir yerleştirmez şu mesajı alıyorum:

Warning: preg_match() [function.preg-match]: Unknown modifier 'g' in C:\xampp\htdocs\swebook\includes\classes.php on line 22

Neyin yanlış olduğunu ve neden kodumda değil de bu web sitesinde çalıştığını açıklayan var mı?


1
Normal ifadeyle tam olarak ne yapmaya çalıştığınızı bilseydik size daha iyi yardım edebilirdik. Ve daha iyi yardıma ihtiyacın var - ya da normal ifade zaten. Bu sitede bulunan tüm kötü yazılmış e-posta normal ifadeleri arasında en kötü olanı seçmiş olabilirsiniz. : /
Alan Moore

2
Bilginize, regexp'iniz şu tür postaları doğrulayacak: "-.-.-.--. @ - bir-- alan adı--.com" ve bu tür GEÇERLİ postalar: "info @ subdomain" DOĞRULANMAZ. domain.com ". Son fakat en az değil \ w ÇOK TEHLİKELİ çünkü PHP preg, Perl Uyumlu Normal İfadeler kullanıyor ve Javascript gibi POSIX DEĞİL. PHP, ABD / İngiltere yerelleştirilmemiş bir sunucuda çalışıyorsa, "àèìòù@domain.com" adresinin geçerli bir postası olması için aksanlı harflerle de eşleşir. Daha fazla ayrıntı için burayı okuyun: it.php.net/manual/en/function.preg-replace.php#92443
Marco Demaio

Yanıtlar:


171

Hiçbir değiştirici yoktur giçin preg_match. Bunun yerine, preg_match_allişlevi kullanmanız gerekir .

Yani bunun yerine:

preg_match("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim", ....)

kullanım:

preg_match_all("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/im", ....)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.