validar texto solo regulares regular letras expresiones expresion ejemplos ejemplo contraseña con javascript regex unicode character-properties

texto - validar solo letras javascript expresiones regulares



Javascript+Expresiones Unicode (8)

¿Cómo puedo usar expresiones regulares con reconocimiento de Unicode en JavaScript? Por ejemplo, debe haber algo similar a / w que pueda coincidir con cualquier punto de código en la categoría Cartas o Marcas (no solo los ASCII), y con suerte tener filtros como [[P *]] para la puntuación, etc.


Situación para ES 6

La próxima especificación del lenguaje ECMAScript, edición 6, incluye expresiones regulares con reconocimiento de Unicode. El soporte debe habilitarse con el modificador u en la expresión regular. Consulte expresiones regulares que reconocen Unicode en ES6 .

Hasta que ES 6 haya finalizado y haya sido ampliamente adoptado entre los proveedores de navegadores, usted todavía está solo. Actualización: ahora hay un transpiler llamado regexpu que traduce expresiones regulares ES6 Unicode en ES5 equivalente. Se puede usar como parte de tu proceso de compilación. Pruébalo en línea.

Situación para ES 5 y abajo

Aunque JavaScript opera en cadenas Unicode, no implementa clases de caracteres con reconocimiento de Unicode y no tiene ningún concepto de clases de caracteres POSIX o subintervalos Unicode.


Al no haber encontrado una buena solución, escribí un pequeño script hace mucho tiempo, al descargar datos de la specification Unicode (v.5.0.0) y generar intervalos para cada categoría Unicode y subcategoría en el BMP (recientemente reemplazado por un pequeño script). Programa Java que usa su propio soporte nativo Unicode).

Básicamente, convierte /p{...} en un rango de valores, muy parecido al resultado de la herramienta mencionada por Tomalak, pero los intervalos pueden llegar a ser bastante grandes (ya que no se trata de bloques, sino de caracteres dispersos a través de diferentes lugares).

Por ejemplo, una Regex escrita así:

var regex = unicode_hack(//p{L}(/p{L}|/p{Nd})*/g);

Se convertirá a algo como esto:

/[/u0041-/u005a/u0061-/u007a...]([...]|[/u0030-/u0039/u0660-/u0669...])*/g

No lo he usado mucho en la práctica, pero parece funcionar bien en mis pruebas, así que estoy publicando aquí en caso de que alguien lo encuentre útil. A pesar de la longitud de las expresiones regulares resultantes (el ejemplo anterior tiene 3591 caracteres cuando se expande), el rendimiento parece aceptable (ver las tests en jsFiddle, gracias a @modiX y @Lwangaman para las mejoras).

Aquí está la source (sin procesar, 27.5 source , minimizada, 24.9 KB, no mucho mejor ...). Puede hacerse más pequeño al separar los caracteres Unicode, pero OTOH correrá el riesgo de problemas de codificación, así que me voy como está. Es de esperar que con ES6 este tipo de cosas ya no sea necesario.

Actualización : parece la misma estrategia adoptada en el complemento Unicode de XRegExp mencionado por Tim Down, excepto que en este caso se utilizan expresiones regulares regulares de JavaScript.


Como se menciona en otras respuestas, las expresiones regulares de JavaScript no admiten las clases de caracteres Unicode. Sin embargo, hay una biblioteca que proporciona esto: el excelente XRegExp Steven Levithan y su complemento Unicode .


En JavaScript, / w y / d son ASCII, mientras que / s es Unicode. No me preguntes por qué. JavaScript admite / p con categorías Unicode, que puede usar para emular un Unicode-aware / w y / d.

Para / d use / p {N} (números)

Para / w use [/ p {L} / p {N} / p {Pc} / p {M}] (letras, números, guiones bajos, marcas)

Actualización: Desafortunadamente, estaba equivocado acerca de esto. JavaScript tampoco admite oficialmente / p, aunque algunas implementaciones aún pueden admitir esto. El único soporte de Unicode en las expresiones regulares de JavaScript está haciendo coincidir los puntos de código específicos con / uFFFF. Puede usar esos en rangos en clases de caracteres.


Esto lo hará:

/[A-Za-z/u00C0-/u00FF ]+/.exec(''hipopótamo maçã pólen ñ poção água língüa'')

Selecciona explícitamente un rango de caracteres Unicode. Funcionará para caracteres latinos, pero otros personajes extraños pueden estar fuera de este rango.


Personalmente, prefiero no instalar otra biblioteca solo para obtener esta funcionalidad. Mi respuesta no requiere ninguna biblioteca externa, y también puede funcionar con poca modificación para los sabores de expresiones regulares además de JavaScript.

El website de Unicode proporciona una forma de traducir las categorías Unicode en un conjunto de puntos de código. Dado que es el sitio web de Unicode , la información que contiene debe ser precisa.

Tenga en cuenta que deberá excluir los caracteres de gama alta, ya que JavaScript solo puede manejar caracteres de menos de FFFF (hexadecimal). Sugiero revisar las casillas de verificación Abordar Intercalar y Escapar, que logran un equilibrio entre evitar caracteres no imprimibles y minimizar el tamaño de la expresión regular.

Estas son algunas expansiones comunes de diferentes propiedades Unicode:

/p{L} (Letras):

[A-Za-z/u00AA/u00B5/u00BA/u00C0-/u00D6/u00D8-/u00F6/u00F8-/u02C1/u02C6-/u02D1/u02E0-/u02E4/u02EC/u02EE/u0370-/u0374/u0376/u0377/u037A-/u037D/u037F/u0386/u0388-/u038A/u038C/u038E-/u03A1/u03A3-/u03F5/u03F7-/u0481/u048A-/u052F/u0531-/u0556/u0559/u0561-/u0587/u05D0-/u05EA/u05F0-/u05F2/u0620-/u064A/u066E/u066F/u0671-/u06D3/u06D5/u06E5/u06E6/u06EE/u06EF/u06FA-/u06FC/u06FF/u0710/u0712-/u072F/u074D-/u07A5/u07B1/u07CA-/u07EA/u07F4/u07F5/u07FA/u0800-/u0815/u081A/u0824/u0828/u0840-/u0858/u08A0-/u08B4/u0904-/u0939/u093D/u0950/u0958-/u0961/u0971-/u0980/u0985-/u098C/u098F/u0990/u0993-/u09A8/u09AA-/u09B0/u09B2/u09B6-/u09B9/u09BD/u09CE/u09DC/u09DD/u09DF-/u09E1/u09F0/u09F1/u0A05-/u0A0A/u0A0F/u0A10/u0A13-/u0A28/u0A2A-/u0A30/u0A32/u0A33/u0A35/u0A36/u0A38/u0A39/u0A59-/u0A5C/u0A5E/u0A72-/u0A74/u0A85-/u0A8D/u0A8F-/u0A91/u0A93-/u0AA8/u0AAA-/u0AB0/u0AB2/u0AB3/u0AB5-/u0AB9/u0ABD/u0AD0/u0AE0/u0AE1/u0AF9/u0B05-/u0B0C/u0B0F/u0B10/u0B13-/u0B28/u0B2A-/u0B30/u0B32/u0B33/u0B35-/u0B39/u0B3D/u0B5C/u0B5D/u0B5F-/u0B61/u0B71/u0B83/u0B85-/u0B8A/u0B8E-/u0B90/u0B92-/u0B95/u0B99/u0B9A/u0B9C/u0B9E/u0B9F/u0BA3/u0BA4/u0BA8-/u0BAA/u0BAE-/u0BB9/u0BD0/u0C05-/u0C0C/u0C0E-/u0C10/u0C12-/u0C28/u0C2A-/u0C39/u0C3D/u0C58-/u0C5A/u0C60/u0C61/u0C85-/u0C8C/u0C8E-/u0C90/u0C92-/u0CA8/u0CAA-/u0CB3/u0CB5-/u0CB9/u0CBD/u0CDE/u0CE0/u0CE1/u0CF1/u0CF2/u0D05-/u0D0C/u0D0E-/u0D10/u0D12-/u0D3A/u0D3D/u0D4E/u0D5F-/u0D61/u0D7A-/u0D7F/u0D85-/u0D96/u0D9A-/u0DB1/u0DB3-/u0DBB/u0DBD/u0DC0-/u0DC6/u0E01-/u0E30/u0E32/u0E33/u0E40-/u0E46/u0E81/u0E82/u0E84/u0E87/u0E88/u0E8A/u0E8D/u0E94-/u0E97/u0E99-/u0E9F/u0EA1-/u0EA3/u0EA5/u0EA7/u0EAA/u0EAB/u0EAD-/u0EB0/u0EB2/u0EB3/u0EBD/u0EC0-/u0EC4/u0EC6/u0EDC-/u0EDF/u0F00/u0F40-/u0F47/u0F49-/u0F6C/u0F88-/u0F8C/u1000-/u102A/u103F/u1050-/u1055/u105A-/u105D/u1061/u1065/u1066/u106E-/u1070/u1075-/u1081/u108E/u10A0-/u10C5/u10C7/u10CD/u10D0-/u10FA/u10FC-/u1248/u124A-/u124D/u1250-/u1256/u1258/u125A-/u125D/u1260-/u1288/u128A-/u128D/u1290-/u12B0/u12B2-/u12B5/u12B8-/u12BE/u12C0/u12C2-/u12C5/u12C8-/u12D6/u12D8-/u1310/u1312-/u1315/u1318-/u135A/u1380-/u138F/u13A0-/u13F5/u13F8-/u13FD/u1401-/u166C/u166F-/u167F/u1681-/u169A/u16A0-/u16EA/u16F1-/u16F8/u1700-/u170C/u170E-/u1711/u1720-/u1731/u1740-/u1751/u1760-/u176C/u176E-/u1770/u1780-/u17B3/u17D7/u17DC/u1820-/u1877/u1880-/u18A8/u18AA/u18B0-/u18F5/u1900-/u191E/u1950-/u196D/u1970-/u1974/u1980-/u19AB/u19B0-/u19C9/u1A00-/u1A16/u1A20-/u1A54/u1AA7/u1B05-/u1B33/u1B45-/u1B4B/u1B83-/u1BA0/u1BAE/u1BAF/u1BBA-/u1BE5/u1C00-/u1C23/u1C4D-/u1C4F/u1C5A-/u1C7D/u1CE9-/u1CEC/u1CEE-/u1CF1/u1CF5/u1CF6/u1D00-/u1DBF/u1E00-/u1F15/u1F18-/u1F1D/u1F20-/u1F45/u1F48-/u1F4D/u1F50-/u1F57/u1F59/u1F5B/u1F5D/u1F5F-/u1F7D/u1F80-/u1FB4/u1FB6-/u1FBC/u1FBE/u1FC2-/u1FC4/u1FC6-/u1FCC/u1FD0-/u1FD3/u1FD6-/u1FDB/u1FE0-/u1FEC/u1FF2-/u1FF4/u1FF6-/u1FFC/u2071/u207F/u2090-/u209C/u2102/u2107/u210A-/u2113/u2115/u2119-/u211D/u2124/u2126/u2128/u212A-/u212D/u212F-/u2139/u213C-/u213F/u2145-/u2149/u214E/u2183/u2184/u2C00-/u2C2E/u2C30-/u2C5E/u2C60-/u2CE4/u2CEB-/u2CEE/u2CF2/u2CF3/u2D00-/u2D25/u2D27/u2D2D/u2D30-/u2D67/u2D6F/u2D80-/u2D96/u2DA0-/u2DA6/u2DA8-/u2DAE/u2DB0-/u2DB6/u2DB8-/u2DBE/u2DC0-/u2DC6/u2DC8-/u2DCE/u2DD0-/u2DD6/u2DD8-/u2DDE/u2E2F/u3005/u3006/u3031-/u3035/u303B/u303C/u3041-/u3096/u309D-/u309F/u30A1-/u30FA/u30FC-/u30FF/u3105-/u312D/u3131-/u318E/u31A0-/u31BA/u31F0-/u31FF/u3400-/u4DB5/u4E00-/u9FD5/uA000-/uA48C/uA4D0-/uA4FD/uA500-/uA60C/uA610-/uA61F/uA62A/uA62B/uA640-/uA66E/uA67F-/uA69D/uA6A0-/uA6E5/uA717-/uA71F/uA722-/uA788/uA78B-/uA7AD/uA7B0-/uA7B7/uA7F7-/uA801/uA803-/uA805/uA807-/uA80A/uA80C-/uA822/uA840-/uA873/uA882-/uA8B3/uA8F2-/uA8F7/uA8FB/uA8FD/uA90A-/uA925/uA930-/uA946/uA960-/uA97C/uA984-/uA9B2/uA9CF/uA9E0-/uA9E4/uA9E6-/uA9EF/uA9FA-/uA9FE/uAA00-/uAA28/uAA40-/uAA42/uAA44-/uAA4B/uAA60-/uAA76/uAA7A/uAA7E-/uAAAF/uAAB1/uAAB5/uAAB6/uAAB9-/uAABD/uAAC0/uAAC2/uAADB-/uAADD/uAAE0-/uAAEA/uAAF2-/uAAF4/uAB01-/uAB06/uAB09-/uAB0E/uAB11-/uAB16/uAB20-/uAB26/uAB28-/uAB2E/uAB30-/uAB5A/uAB5C-/uAB65/uAB70-/uABE2/uAC00-/uD7A3/uD7B0-/uD7C6/uD7CB-/uD7FB/uF900-/uFA6D/uFA70-/uFAD9/uFB00-/uFB06/uFB13-/uFB17/uFB1D/uFB1F-/uFB28/uFB2A-/uFB36/uFB38-/uFB3C/uFB3E/uFB40/uFB41/uFB43/uFB44/uFB46-/uFBB1/uFBD3-/uFD3D/uFD50-/uFD8F/uFD92-/uFDC7/uFDF0-/uFDFB/uFE70-/uFE74/uFE76-/uFEFC/uFF21-/uFF3A/uFF41-/uFF5A/uFF66-/uFFBE/uFFC2-/uFFC7/uFFCA-/uFFCF/uFFD2-/uFFD7/uFFDA-/uFFDC]

/p{Nd} (dígitos decimales numéricos):

[0-9/u0660-/u0669/u06F0-/u06F9/u07C0-/u07C9/u0966-/u096F/u09E6-/u09EF/u0A66-/u0A6F/u0AE6-/u0AEF/u0B66-/u0B6F/u0BE6-/u0BEF/u0C66-/u0C6F/u0CE6-/u0CEF/u0D66-/u0D6F/u0DE6-/u0DEF/u0E50-/u0E59/u0ED0-/u0ED9/u0F20-/u0F29/u1040-/u1049/u1090-/u1099/u17E0-/u17E9/u1810-/u1819/u1946-/u194F/u19D0-/u19D9/u1A80-/u1A89/u1A90-/u1A99/u1B50-/u1B59/u1BB0-/u1BB9/u1C40-/u1C49/u1C50-/u1C59/uA620-/uA629/uA8D0-/uA8D9/uA900-/uA909/uA9D0-/uA9D9/uA9F0-/uA9F9/uAA50-/uAA59/uABF0-/uABF9/uFF10-/uFF19]

/p{P} (Puntuación):

[!-#%-*,-//:;?@/[-/]_/{/}/u00A1/u00A7/u00AB/u00B6/u00B7/u00BB/u00BF/u037E/u0387/u055A-/u055F/u0589/u058A/u05BE/u05C0/u05C3/u05C6/u05F3/u05F4/u0609/u060A/u060C/u060D/u061B/u061E/u061F/u066A-/u066D/u06D4/u0700-/u070D/u07F7-/u07F9/u0830-/u083E/u085E/u0964/u0965/u0970/u0AF0/u0DF4/u0E4F/u0E5A/u0E5B/u0F04-/u0F12/u0F14/u0F3A-/u0F3D/u0F85/u0FD0-/u0FD4/u0FD9/u0FDA/u104A-/u104F/u10FB/u1360-/u1368/u1400/u166D/u166E/u169B/u169C/u16EB-/u16ED/u1735/u1736/u17D4-/u17D6/u17D8-/u17DA/u1800-/u180A/u1944/u1945/u1A1E/u1A1F/u1AA0-/u1AA6/u1AA8-/u1AAD/u1B5A-/u1B60/u1BFC-/u1BFF/u1C3B-/u1C3F/u1C7E/u1C7F/u1CC0-/u1CC7/u1CD3/u2010-/u2027/u2030-/u2043/u2045-/u2051/u2053-/u205E/u207D/u207E/u208D/u208E/u2308-/u230B/u2329/u232A/u2768-/u2775/u27C5/u27C6/u27E6-/u27EF/u2983-/u2998/u29D8-/u29DB/u29FC/u29FD/u2CF9-/u2CFC/u2CFE/u2CFF/u2D70/u2E00-/u2E2E/u2E30-/u2E42/u3001-/u3003/u3008-/u3011/u3014-/u301F/u3030/u303D/u30A0/u30FB/uA4FE/uA4FF/uA60D-/uA60F/uA673/uA67E/uA6F2-/uA6F7/uA874-/uA877/uA8CE/uA8CF/uA8F8-/uA8FA/uA8FC/uA92E/uA92F/uA95F/uA9C1-/uA9CD/uA9DE/uA9DF/uAA5C-/uAA5F/uAADE/uAADF/uAAF0/uAAF1/uABEB/uFD3E/uFD3F/uFE10-/uFE19/uFE30-/uFE52/uFE54-/uFE61/uFE63/uFE68/uFE6A/uFE6B/uFF01-/uFF03/uFF05-/uFF0A/uFF0C-/uFF0F/uFF1A/uFF1B/uFF1F/uFF20/uFF3B-/uFF3D/uFF3F/uFF5B/uFF5D/uFF5F-/uFF65]

La página también reconoce una serie de clases de caracteres desconocidas, como /p{Hira} , que son solo los caracteres (japoneses) Hiragana:

[/u3041-/u3096/u309D-/u309F]

Por último, es posible conectar una clase char con más de una propiedad Unicode para obtener una expresión regular más corta de la que obtendría simplemente combinándolas (siempre que se seleccionen ciertas configuraciones).



[^ / u0000- / u007F] + para cualquier carácter que no esté incluido en caracteres ASCII.

Por ejemplo:

function isNonLatinCharacters(s) { return /[^/u0000-/u007F]/.test(s); } console.log(isNonLatinCharacters("身分"));// Japanese console.log(isNonLatinCharacters("测试"));// Chinese console.log(isNonLatinCharacters("حمید"));// Persian console.log(isNonLatinCharacters("테스트"));// Korean console.log(isNonLatinCharacters("परीक्षण"));// Hindi console.log(isNonLatinCharacters("מִבְחָן"));// Hebrew

Aquí hay algunas referencias perfectas:

Generador RegExp de rango Unicode

Expresiones regulares Unicode

Códigos de código de carácter Unicode 10.0

Coincidir con el rango de bloque Unicode