PHP: geçersiz karakter (az, AZ, 0-9, ancak tüm #, -, $.) Kontrol etmek için en hızlı yolu nedir?

6 Cevap php

Ben mümkün olduğunca hızlı bir PHP soket sunucusuna tampon girişi kontrol etmek zorunda. - #,, Az, AZ, 0-9: Bunu yapmak için, ben giriş mesajı $ tampon aşağıdaki dışında herhangi bir karakter (ler) varsa bilmeniz gerekir. ve $

Şu anda aşağıdaki ereg işlevini kullanarak, ancak hızı optimize etmek için yolu vardır merak ediyorum. Belki farklı bir işlevi, ya da farklı bir regex kullanmalı mıyım?

if (ereg("[A-Za-z0-9]\.\#\-\$", $buffer) === false)
{
    echo "buffer only contains valid characters: a-z, A-Z, 0-9, #, -, ., $";
}

6 Cevap

Bu fonksiyonu deneyin:

function isValid($str) {
    return !preg_match('/[^A-Za-z0-9.#\\-$]/', $str);
}

[^A-Za-z0-9.#\-$] geçersiz herhangi bir karakter açıklar. preg_match bir maç (geçersiz bir karakter) bulursa, aksi 0 1 dönecektir ve. Ayrıca !1 olan false ve !0 olan true. Böylece isValid döner false geçersiz bir karakter aksi bulundu ve true eğer.

Fonksiyonların preg ailesi ereg daha biraz daha hızlıdır. Geçersiz karakterler için test etmek için, böyle bir şey deneyin:

if (preg_match('/[^a-z0-9.#$-]/i', $buffer)) print "Invalid characters found";

Sen preg yerine kullanarak ereg üzerinde kaydırmak isteyeceksiniz. Fonksiyonların ereg aile amortismana tabi olmuştur, ve onları bir PHP uyarısı kusmak olacaktır kullanılarak (5.3 php beri), ve yakında teh dilden kaldırılır olacak. Ayrıca, gebelik fonksiyonları daha hızlı ereg daha genel olarak, olduğu anekdot bilgelik oldu.

Hız gelince, benim deneyim ve ben dize performansı bu tür optimize, benim kariyerimde gördüğüm codebases dayanarak bu noktada erken olacaktır. Mantıksal bazı işlev veya yöntemi karSIlaStIrmasInI sarın

//pseudo code based on OP 
function isValidForMyNeeds($buffer)
{
    if (ereg("[A-Za-z0-9]\.\#\-\$", $buffer) === false)
    {
        echo "buffer only contains valid characters: a-z, A-Z, 0-9, #, -, ., $";
    }
}

ve o / ne zaman bu tek bir yerde herhangi gerekli optimizasyonu uygulamak bir performans sorunu belirlemek durumunda.

Gebelik isntead, onun daha hızlı ve ereg durduruldu kullanın.

preg_match hem daha hızlı ve daha güçlü ereg daha:

if(preg_match('/^[^a-z0-9\.#\-\$]*$/i', $sString) > 0) //check if (doesn't contain illegal characters) is true
{
  //everything's fine: $sString does NOT contain any illegal characters
}

ya da etrafında çevirin:

if(preg_match('/[a-z0-9\.#\-\$]/i', $sString) === 0) //check if (contains illegal character) is false
{
  //everything's fine: $sString does NOT contain any illegal characters
}

Only allowing characters a-z uppercase or lowercase..

if (preg_match("/[^A-Za-z]/", $FirstName))
{
    echo "Invalid Characters!";
}

Adding numbers..

if (preg_match("/[^A-Za-z0-9]/", $FirstName))
{
    echo "Invalid Characters!";
}

Adding additional characters to allow (in this case the exclamation mark)..

(Gösterildiği gibi ek karakterler bir "\" ile gelmelidir.)

if (preg_match("/[^A-Za-z0-9\!]/", $FirstName))
{
    echo "Invalid Characters!";
}