2010-10-14 22 views
9

¿Cómo puedo usar preg_match para ver si existen caracteres especiales [^'£$%^&*()}{@:'#~?><>,;@|\-=-_+-¬`] en una cadena?caracteres especiales preg_match

+3

definen "caracteres especiales" ... –

+0

[^ '£ $%^& *()} {@:'? # ~><>,; @ | \ - = - _ + - ¬'] – stefanosn

+2

¿Por qué quieres usar 'preg_match()'? Si todo lo que hace es verificar la existencia de estos caracteres, ¿por qué no utilizar 'strpos()'? – staticsan

Respuesta

7

[\W]+ coincidirá con cualquier carácter no verbal.

+0

Gracias por su respuesta, pero solo necesito caracteres específicos como^'$ $%^& *()} {@:' # ~?><>,; @ | \ - = -_ + - ¬' – stefanosn

+0

Normalmente, Diría que '[\ W]' aún es perfecto para usted, ya que un "carácter de palabra" se refiere a cualquier letra, número o guión bajo y excluye prácticamente todo lo demás. No estoy seguro de si incluye guiones. Entonces noté que el guión bajo estaba en la lista de caracteres que desea verificar. Como solo quiere encontrar caracteres individuales, puede ser más rápido usar 'explde()' y 'in_array()' en lugar de 'preg_match()', o simplemente usar un ciclo 'while()'. Aunque ninguno de estos son muy intuitivos. – stevendesu

+0

¿Qué sucede si la cadena contiene caracteres Unicode? ¡Su expresión regular los excluye! – Emerald214

9

Use preg_match. Esta función toma una expresión regular (patrón) y la cadena del asunto y devuelve 1 si se produjo la coincidencia, 0 si no coincide, o false si ocurre un error.

$input = 'foo'; 
$pattern = '/[\'\/~`\[email protected]#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/'; 

if (preg_match($pattern, $input)){ 
    // one or more matches occurred, i.e. a special character exists in $input 
} 

También puede especificar banderas y el desplazamiento de la Realizar una Concordancia de expresiones regulares función. Vea el enlace de documentación arriba.

+0

¿Hay alguna referencia/enlace para símbolos individuales? – asterisk

3

Mi función hace la vida más fácil.

function has_specchar($x,$excludes=array()){ 
    if (is_array($excludes)&&!empty($excludes)) { 
     foreach ($excludes as $exclude) { 
      $x=str_replace($exclude,'',$x);   
     }  
    }  
    if (preg_match('/[^a-z0-9 ]+/i',$x)) { 
     return true;   
    } 
    return false; 
} 

El segundo parámetro ($ excludes) se puede pasar con los valores que desea ignorar.

Uso

$string = 'testing_123'; 
if (has_specchar($string)) { 
    // special characters found 
} 

$string = 'testing_123'; 
$excludes = array('_'); 
if (has_specchar($string,$excludes)) { } // false