filter_var karşı preg_match

2 Cevap php

Sabah bütün

Ben PHP'nin son sürümü ile uyumlu olacak şekilde üzerinde çalışıyorum bir site dönüştürme değilim, bu yüzden geçiyor ve onların olmayan amortismana tabi eşdeğer ereg tüm örneklerini değiştirme. Ancak ben filter_var adında PHP ile kullanışlı bir yerleşik işlevi hakkında söylendi.

Ne benim soru, bu preg_match'in üzerinde filter_var ile gitmek mantıklı olur olduğunu? Gibi bir performans artışı ya da başka birisini tercih başka faydaları da var, ve eğer öyleyse bunlar nelerdir?

2 Cevap

filter_var — Filters a variable with a specified filter
preg_match — Perform a regular expression match

Ben kullanım değişkenleri filtrelemek için filter_var kullanabilirsiniz sanırım ama sanmıyorum preg_match'in için bir yedek filter_var regex kullanmak değildir ereg yükseltmek için iyi bir fikir gibi yapmanız işlevsellik / mantığı bir sürü yeniden yazmak zorunda kalacak bu.

Kullanımı üzerinden geçiş filter_var() gerçekten harika bir fikir olacaktır. Sen ancak onları tamamen ortadan kaldırmak mümkün olacaktır, mevcut normal ifadeler kullanmak mümkün olmaz. Genellikle, bizim apps kullanmak regex sadece basit validation s ve filtreleme, filter_var() fonksiyonu için tasarlanmıştır tam olarak ne olduğu için kullanılır.

Örneğin, kod, zaten olabilir:

if (eregi('\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b', $_POST['email'])) {
    echo "valid";
}

Bu (özel düzenli ifadeler dayanarak değil) güzel sürümü yerini olabilir:

if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    echo "valid";
}

filter_var() function da inceliyoruz belirli verilere göre gerekli değildir, ve (yerine boolean) temizlenmiş dize dönecekti sanitize dışarı karakter yeteneğine sahiptir:

$clean = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

Ile kullanım Bu tür filter_var() ereg_replace() fonksiyonlarını yazın yerini alacak.

Ancak, yükseltmeleri basit için, sadece onları PCRE'nin uyumlu (ve bu nedenle artık PHP 5.3 + önerilmiyor) yapan bir 'p' ile fonksiyonların ereg (*) aile "öneki" olabilir.