2011-08-14 63 views
14

Tengo un pequeño problema con preg_replace. Necesito una función que convierta todos los caracteres a nada excepto [A-z][0-9] y algunos . ! ?Filtro PHP con preg_replace solo permite letras

Podría hacer un preg_match, pero esto solo lo verifico y quiero ser reemplazado. Esto para no poner caracteres basura como <p> y ;[[;[p;[ en la descripción META TAG.

Así que el guión debe ser como:

;")<br>kk23?! => brkk23?!

Cualquier ayuda se agradece: D

+0

sé cómo usar preg_match ... realmente no encajo con preg_replace para filtrar datos – Master345

+0

¿Cómo es eso posible? Escriba la llamada preg_match que coincida con la cadena. Cambie la palabra 'coincidencia' por 'reemplazar' en el nombre de la función. Agregue un segundo parámetro, que es una cadena vacía, con la que desea reemplazar los caracteres coincidentes. Tada, has usado preg_replace! –

Respuesta

34
$string = ';")<br>kk23?!'; 
$new_string = preg_replace("/[^A-Za-z0-9?!]/",'',$string); 
echo $new_string; 

letras dejar-, números, espacios,?!

/* 3 choices. Pick one you like! */ 
$str = preg_replace("/[^A-Za-z0-9?! ]/","",$str); 
$str = preg_replace("/[^A-Za-z0-9?!\s]/","",$str); 
$str = preg_replace("/[^A-Za-z0-9?![:space:]]/","",$str); 
+5

'ereg_replace()' está en desuso .. 'preg_replace()' sería mejor – Floern

+1

Gracias Floern. Agregué algunas soluciones más. – dang

+0

esto funciona muy bien: D gracias – Master345

6
$var=preg_replace('~[^A-Za-z0-9?.!]~','',$var); 

No olvidemos A-Za-z y A-z no son los mismos

+0

Olvidó los delimitadores. –

+0

@fireeyedboy, Oh, tienes razón – RiaD

+0

@RiaD ¿Cuál es la diferencia entre 'A-Za-z' y' A-z'? – qwerty

1

La forma más fácil es hacer algo similar a: Solo agregue los caracteres después del !, asegúrese de escapar de ellos si es necesario.

$string = "<br>kk23?!"; 
$string = preg_replace('/[^A-Za-z0-9 \?!]/', '', $string); 
+0

Advertencia: preg_replace(): modificador desconocido 'g' –

0

Más visita a esta página. Creo que más personas tienen el mismo problema. La mejor manera es probarse y obtener lo que necesita. Costumbre suya o copiar y pegar este php y probarlo:

$sample_input = '&&*9?><<script>}cat-<html>ch(_P.,,mE.:;xc##e*p32t.ion $e){di+-($e->ge69tMesPHP _f0sage()3);}'; 

$output = ereg_replace("[^..........]", "", $sample_input);   

echo "validate =".$output; 

modificar rellenando esto para conseguir lo que quiere:

$output = ereg_replace("[^.........]", "", $sample_input); 

Ejemplo: si desea que sólo minúsculas y luego hacerlo de esta manera:

caso
$output = ereg_replace("[^a-z]", $sample_input); 

inferior con espacios en blanco:

$output = ereg_replace("[^a-z ]", $sample_input); 

y más ....., Este es un simple método de validación:

$username = ereg_replace("[^A-Z0-9_]", "", $username); 
$fullname = ereg_replace("[^A-Za-z0-9., ]", "", $fullname); 
$city  = ereg_replace("[^A-Za-z -]", "", $city); 
$phone = ereg_replace("[^0-9 +()-]", "", $phone); 
$state = ereg_replace("[^A-Za-z -]", "", $state); 
$zipcode = ereg_replace("[^0-9]", "", $zipcode); 
$country = ereg_replace("[^A-Za-z -]", "", $country); 
$gender = ereg_replace("[^mf]", "", $gender); 

Pruebe usted mismo, esperanza ayudará ...

1

Una solución rápida será la siguiente también:

if (preg_match('/^[\w\.]+$/', $str)) { 
    echo 'Str is valid'; 
} else 
    echo 'Str is invalid'; 

// cadena sólo contienen la a a la Z, a a la Z, 0 a 9 y _ (subrayado)

\w - matches [a-zA-Z0-9_]+ 

Espero que ayude.

Cuestiones relacionadas