Estoy buscando una función php que tome una cadena de entrada y devuelva una versión desinfectada eliminando todos los caracteres especiales y dejando solo alfanuméricos.
Necesito una segunda función que haga lo mismo pero solo devuelva caracteres alfabéticos AZ.
Cualquier ayuda muy apreciada.
unichars '\p{Latin}' '\p{Alphabetic}' '[^A-Za-z]' | wc -l
== 1192 puntos de código que son alfabéticos latinos pero que no son AZ. Es un mito común que ASCII es suficiente para el inglés. No lo es, y es por eso que escribir AZ huele a código .Respuestas:
Advertencia: Tenga en cuenta que el inglés no se limita solo a AZ.
Intente esto para eliminar todo excepto az, AZ y 0-9:
Si su definición de alfanumérico incluye letras en idiomas extranjeros y escrituras obsoletas, deberá utilizar las clases de caracteres Unicode.
Intente esto para dejar solo AZ:
La razón de la advertencia es que palabras como currículum contienen la letra
é
que no coincidirá con esta. Si desea hacer coincidir una lista específica de letras, ajuste la expresión regular para incluir esas letras. Si desea hacer coincidir todas las letras, use las clases de caracteres apropiadas como se menciona en los comentarios.fuente
[\p{Alphabetic}\p{Numeric}]
. Olvidé la propiedad alfabética PCRE, pero puede aproximarla con[\pL\pM\pN]
.[A-Z]
siempre está mal, a veces .i
pero solo tengo que preocuparme por un grupo demográfico inglés ... olvido que mucha gente tiene que pensar en otros idiomas. Por cierto, acabo de notar que eres el usuario de mayor reputación que nunca ha hecho una pregunta. ¡Incluso Jon Skeet ha hecho preguntas antes!En lugar de
preg_replace
eso, siempre puede usar las funciones de filtro de PHP usando lafilter_var()
función conFILTER_SANITIZE_STRING
.fuente
FILTER_SANITIZE_STRING
? Que yo sepa, lo más cercano que se puede archivar de esta manera es conFILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH
, pero eso no dejará solo letras y números, sino también puntos, barras, porcentajes y todo eso.fuente