Estoy tratando de escribir una expresión regular que coincida solo con letras en árabe e inglés (no se permiten números ni caracteres especiales) se permiten espacios. Esta expresión regular funcionó bien pero permite números en el medio de la cadena
/[\u0620-\u064A\040a-zA-Z]+$/por ejemplo, coincide con (سم111111ر) que se supone que no coincide. La pregunta es si hay una manera de no hacer coincidir los números en el medio de las letras.
Tenga en cuenta que en JavaScript tendrá que usar ECMAScript 2018+ con soporte de clase de categoría Unicode:
const texts = ['أسبوع أسبوع','week week','hunāka','سم111111ر']; const re = /^(?:(?=[\p{Script=Arabic}A-Za-z])\p{L}|\s)+$/u; for (const text of texts) { console.log(text, '=>', re.test(text)) } El ^(?:(?=[\p{Script=Arabic}A-Za-z])\p{L}|\s)+$ significa
^ - comienzo de la cadena(?: - inicio de un contenedor de grupo que no captura:(?=[\p{Script=Arabic}A-Za-z]) - una anticipación positiva que requiere que un carácter del alfabeto árabe o una letra ASCII aparezca inmediatamente a la derecha de la ubicación actual\p{L} - cualquier letra Unicode (nota que \p{Alphabetic} incluye un poco más de caracteres de "letra", tal vez quieras probarlo)| - o\s - espacio en blanco)+ - repetir una o más veces$ - final de la cadena.