Actualmente estoy trabajando para verificar si una cadena contiene caracteres acentuados. por ejemplo
hellohello ---> return true helloéèhello ---> return false because the text contains accent characters¿alguien puede ayudarme con la expresión regular?
gracias
No estoy seguro de por qué quieres una respuesta basada en expresiones regulares. Pero si eso no es absolutamente necesario, así es como puede detectarlo.
( Descargo de responsabilidad: no estoy familiarizado con los idiomas europeos que tienen alfabetos acentuados, por lo que es posible que me haya perdido algún aspecto lingüístico aquí. Además, estoy más familiarizado con Java y el JavaScript aquí puede no ser óptimo).
Si su texto es ASCII, entonces no conozco otra forma que recorrer la matriz de caracteres y comparar su valor ASCII para ver si es uno de los caracteres acentuados. Puede pasar del 1 al 255 e imprimir los caracteres.
Los caracteres acentuados, según veo, empiezan desde el 192 en adelante. Sin embargo, no todos los caracteres más allá de este lo son, por lo que tendrá que compararlos con el conjunto correcto.
Aquí hay un pseudocódigo que muestra lo que quiero decir. (No soy experto en JavaScript).
/* This array has to be prepared by looking at all ASCII characters till 255. */ char[] accented = new char[]{ (char) 192, (char) 193, ... }; for( let c of Array.from( 'helloéèhello' ) ){ if( isPresentIn( c, accented ) ){ console.log( "Accented chars present" ) break; } }Si se trata de un texto Unicode, existe una forma indirecta de hacerlo utilizando la normalización de caracteres Unicode. En Unicode, los caracteres acentuados suelen ser caracteres compuestos. Entonces, puede descomponer el carácter y verificar si tiene un componente mayor que el punto de código 256.
Para comprenderlo en detalle, puede consultar la descripción en https://www.unicode.org/reports/tr15/tr15-23.html .
Esto no es perfecto, pero será una buena guía para crear un diseño más completo.
Descomponer en JavaScript:
'helloéèhello'.normalize( 'NFD' ) Por ejemplo, é se descompone en e y el punto de código 768, è se descompone en e y el punto de código 769.
Tenga en cuenta la diferencia en los caracteres sin y después de la normalización.
Array.from( 'helloéèhello'.normalize( 'NFD' ) ) (14) ['h', 'e', 'l', 'l', 'o', 'e', '́', 'e', '̀', 'h', 'e', 'l', 'l', 'o'] Array.from( 'helloéèhello' ) (12) ['h', 'e', 'l', 'l', 'o', 'é', 'è', 'h', 'e', 'l', 'l', 'o']Si está tratando de verificar los correos electrónicos, consulte la respuesta que sugirió Alex, pero si solo desea verificar los dos casos de prueba anteriores, aquí está.
Tenga en cuenta que esto no es para probar un correo electrónico válido, solo una cadena válida
^[a-zA-Z@._]*[a-zA-z0-9]$ ^ Comenzando con [a-zA-Z0-9@._] lowercase, uppercase, digits, @ , . & _ are valid characters meaning accent and other symbols are not valid * greedy select matching previous character sets [a-zA-z0-9]$` termina con datos alfanuméricos.
Ejemplo
hello@gmail.com ---> return true helloégmail ---> return false because the text contains accent characters hello1 -> true test@ -> false as it should end with alphanumeric character