Temizlik için bir dize regex

4 Cevap php

Bu RegEx bir arama formundan temizleme kullanıcı girişi için

$query = preg_replace("/[^A-Za-z0-9 _.,*&-]/", ' ', $query);

Ben de geçerli bir karakter olarak eğik çizgi eklemeniz gerekir, ama bunu eklerseniz, ben bir hata alıyorum. Ben bunu kaçmak zorunda ama nasıl bulamıyor varsayalım ki

$query = preg_replace("/[^A-Za-z0-9 _.,*&-/]/", ' ', $query); // doesn't works
$query = preg_replace("/[^A-Za-z0-9 _.,*&-//]/", ' ', $query); // doesn't works
$query = preg_replace("/[^A-Za-z0-9 _.,*&-\/]/", ' ', $query); // doesn't works

Php kullanarak

4 Cevap

Diğer bir şey kullanabilirsiniz ardından / sizin sınırlayıcı olarak - böyle bir şey deneyin:

$query = preg_replace("%[^A-Za-z0-9 _.,*&-/]%", ' ', $query);

Kobe ayrıca bu durumda kaçmak için doğru yolu yayınlanmıştır, ama ben mümkün ben, ifade kullanarak değilim şey sınırlayıcı geçtiğinizde regex daha okunabilir kalır bulabilirsiniz.

EDIT

Ek bilgi Biraz http://www.php.net/manual/en/regexp.reference.delimiters.php (burada alıntı bulunabilir :)

"PCRE işlevleri kullanırken, desen sınırlayıcı tarafından kapalı olması gereklidir. Sınırlayıcı olmayan herhangi bir alfanümerik olmayan eğik çizgi, boşluk olmayan bir karakter olabilir."

Sen iki kere kaçmak gerekir - "\/" dize oluşturmak gerekir, bu yüzden eğik çizgi olarak da kaçmak gerekir "\\/":

$query = preg_replace("/[^A-Za-z0-9 _.,*&\\/-]/", ' ', $query); 

Ayrıca, emin - sonuna gitmek, ya da yanı sıra bu kaçış olun. Bu bir karakter kümesinde iki karakter arasında farklı vardır.

$query = preg_replace("/[^A-Za-z0-9 _.,*&-\/]/", ' ', $query);

: böyle, tek tırnak ile yazdıysa çalışacak

$query = preg_replace('/[^A-Za-z0-9 _.,*&\/-]/', ' ', $query);

\ / \ N "gibi" "; Bunun nedeni içine dizeleri" a / PHP deneyin için özel bir anlam bulmak için yapar kaçan. \ N \ r \ t vb çözümlenir ve $ Böylece vars "olduğunu başarısız olduğunda ve ters eğik çizgi kaldırır.

'Içine dizeleri ayrıştırıldı değil.

Bir karakteri kaçmak için, sadece onun önünde bir ters eğik çizgi koyun; ancak çift tırnaklı dize kullanarak unutmayın, - muhtemelen bu zor kılan nedeni olan: muhtemelen ters eğik çizgi kendisi Espace var.


Another solution that I generally use is to work with a different regex delimiter, that you don't have in your regex. For instance, using a # :

$query = preg_replace("#[^A-Za-z0-9 _.,*&-/]#", ' ', $query);

Bu :-) sorunu çözmek gerekir