2011-11-22 72 views
6

¿Cómo puedo agregar/improvisada mi código de manera acento español será considerada como válida, además de alfabeto normal (az)PHP Regex validar letras y acento español

Tengo el siguiente en mi código

public static function IsAlpha($s){ 
    $reg = "#[^a-z\s-]#i"; 
    $count = preg_match($reg, $s, $matches); 
    return $count == 0; 
} 
+3

La pregunta potencialmente duplicada tiene la respuesta: [PHP: PREG: ¿Cómo hacer coincidir los caracteres especiales como una tumba?] (Http://stackoverflow.com/questions/2133758/php-preg-how-to-match-special- chars-like-a-grave) – Wiseguy

+0

Es una pregunta similar, sin embargo, todavía no puedo encontrar la forma de integrarla con mi expresión regular existente. – xar

+1

@Wiseguy: debe publicar este comentario como respuesta. – Toto

Respuesta

20

como se encuentra en la respuesta a this question, podría coincidir con los caracteres acentuados utilizando todo el CartaUnicode property\p{L}. Eso incluye a-z personajes regulares a lo largo de los acentuados, por lo reemplace a-z en su expresión con este modo:

$reg = "#[^\p{L}\s-]#u"; 

Note que para usar esto necesita el UTF-8 modifier u después de su delimitador de cierre, ya que los documentos dicen tales Unicode "los tipos de caracteres están disponibles cuando se selecciona modo UTF-8 ".

+0

+1, pero no hay necesidad de marcar. – Toto

+0

@ M42 Buena captura. La bandera insensible a mayúsculas/minúsculas ahora no es necesaria, a menos que la expresión regular se expanda posteriormente y otras partes del patrón lo necesiten. – Wiseguy

+1

En mi caso, tuve que agregar el modificador u (UTF8) para que funcione. – user276648

1

creo que se puede utilizar el hexadecimal representation de cada letra:

<?php 
function IsAlpha($sString) 
{ 

    $reg = "#[a-zA-Z\xE1\xE9\xED\xF3\xFA\xC1\xC9\xCD\xD3\xDA\xF1\xD1]+#i"; 
    $count = preg_match_all($reg, $sString, $matches, PREG_OFFSET_CAPTURE); 
    return $matches; 
} 
echo '<pre>'; 
print_r(IsAlpha("abcdefgh ñ á é í ño 123 asd asáéío nmas asllsdasd óúfl ÑABDJÓ ÚñÍÉ")); 
echo '</pre>'; 

no sé si hay todas las letras, pero se puede añadir más con este link.

Cuestiones relacionadas