Düzenli ifade kullanarak yasadışı karakterler için dize denetleme

5 Cevap php

Ben PHP şu normal ifadeyi kullanarak herhangi bir yasadışı karakter için bir kontrol etmek istiyorum. Esasen, sadece alfanümerik izin ve çizgi (_) istiyorum. Ne yazık ki kod takip parça düzgün çalışması için görünmüyor. String $ kullanıcı adı herhangi bir yasadışı karakter varsa bu doğru dönmelidir. Ancak, yine dize herhangi bir karakter verir. Herhangi bir fikir ne bir düzenli ifade ile yanlış?

if ( !preg_match("/^[-a-z0-9_]/i", $username) )
{
    return true;
}

Şimdiden teşekkürler.

5 Cevap

Sizin kod ilk karakter geçerli olup olmadığını görmek için denetler. any geçersiz karakterler varsa, karakter sınıfı yerine işlevi getiri inkâr ve demir kaldırmak görmek için kontrol etmek için:

if ( preg_match("/[^-a-z0-9_]/i", $username) )
{
    return true;
}

Eğer izin vermek istemiyorsanız da, elbette, (harfler, sayılar ve alt çizgi olan "kelime" karakter) /[^-\w]/ bunu kısaltmak, hatta sadece /\W/ olabilir tire.

$ username sadece alphanum vardır ve altını eğer TRUE döndürecektir

if (preg_match("/^[a-z0-9_]+$/i", $username) )
{
    return true;
}

Sizin ifade sadece 1 karakter ile eşleşir. Try /^[-a-z0-9_]+$/i '+' maçları daha sonra 1 karakter ve '$' hattı çapa sonu

Bunun yerine sadece ilk karakteri kontrol, çok sonunda çapa gerekiyor. Try "/^[-a-z0-9_]*$/i" yerine.

Eğer biri için hiç repeater var. Sen + gibi bir repeater gerekir. Bildiğim kadarıyla bunu yürütme olmadan görebileceğiniz gibi, bu ilk karakterden sonraki satırın başlangıç ​​ve bir-zA-Z0-9 uyan bir karakter ve _ ama hiçbir şey kontrol edin.