Alfanümerik için regex

6 Cevap php

Ben bu PHP düzenli ifade ettik:

$username = preg_replace('/[^a-z0-9]/i', '', $username);

Bu izin vermesi A-Z ve 0-9. Nasıl ., - ve _ hem de izin verebilir?

6 Cevap

Sen şu regex kullanabilirsiniz:

/[^a-z0-9._-]/i
  • i at the end is to make the pattern matching case-insensitive. You can drop it and use: /[^a-zA-Z0-9._-]/
  • -(hyphen) has a special meaning in char class if its surrounded on both sided so we put it at the end so that its treated literally. You can also do: /[^a-z0-9.\-_]/ where we are escaping the hyphen
  • A dot in a char class is not a meta char hence will be treated literally and need not be escaped.
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);

Grubu üzerindeki karakterlerin isn't ([^]) bir şey kaldırır. Hypern orada sonuncusu, yani özel anlamını kaybeder unutmayın.

Eğer maç gereken tam olarak ne biliyorsanız, sadece bir karakter grubuna bunu belirtin. Çizgi çok başlatmak veya bitirmek çok az olması gerekir ya.

/[A-Z0-9._-]/
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);

Geçerli kodu aslında izin vermiyor hem A-Z ve a-z - i bayrak durumda duyarsız olarak düzenli ifade işaretler.

Denemek

$username = preg_replace('/[^a-z0-9.-_]/i', '', $username);

Kolay, sadece de düzenli ifade için bu karakterler eklemek

$username = preg_replace('/[^a-zA-Z0-9._-]/','',$username)

. aksi takdirde bir dizi tanımlamak için kullanılan olurdu çünkü (biz sadece tabii kaçmış olabilir) sonunda gidiyor - onun 'Matchall' karakteri, çünkü öncelenmesi gerekir.