Necesito una expresión regular que coincida con todos los signos de puntuación, como el estándar [,! @ # $%^& *()], pero incluye marcas internacionales como el signo de interrogación español al revés, períodos chinos, etc. Mi google-fu se está quedando corto. ¿Alguien tiene una expresión tan regular a mano que sea compatible con Javascript?¿Expresión regular de Javascript para la puntuación (internacional)?
Respuesta
Si es posible utilizar un complemento, existe un complemento para JavaScript: XRegExp Unicode plugins. Eso agrega soporte para categorías Unicode, scripts y bloques (yo personalmente solo he leído sobre él, nunca lo he usado).
Con este complemento debería ser posible utilizar categorías Unicode como \p{P}
como se explica en regular-expressions.info.
Actualización: Bien, lo probé, y parece funcionar bien.
Debe obtener la lib de XRegExp y adicionalmente los complementos de la categoría Unicode Base y Unicode (vinculados arriba).
<script src="xregexp.js"></script>
<script src="addons/unicode-base.js"></script>
<script src="addons/unicode-categories.js"></script>
<script>
var unicodePunctuation = XRegExp("^\\p{P}+$");
alert(unicodePunctuation.test("?.,;!¡¿。、·")); // true
</script>
Las alertas anteriores true
. Incluí algunos signos de puntuación en español y chino en mi cadena de prueba, "?.,;!¡¿。、·"
.
Esto se ve bastante prometedor, aunque siempre estoy indeciso para hinchar mi aplicación de Javascript con otra biblioteca. Volveré a verificar una vez que confirme que funciona para mi propósito. –
Gracias. Aquí hay una JSBin del código (desplácese hasta la parte inferior y también vea la consola de Chrome) http://jsbin.com/uFiNeDOn/3/edit?js,console –
Bueno ... idk qué tan extensa que sería, pero se puede usar esto:
[^\w\s\n\t]
. La única cuestión es que el carácter '_' está incluido en' \ w' . Además, ¿se permitirían las letras unicode (como 'ö') como falsos positivos? – sdleihssirhc
'\ s' incluye tanto' \ n' como '\ t', y esto también coincidiría con los caracteres de las palabras que no son ASCII, los caracteres de control, los caracteres de moneda y otros caracteres sin puntuación. –
Otros caracteres Unicode que se incluyen como falsos positivos es mi principal problema actual. Supongo que un problema equivalente para mí es encontrar una buena expresión regular que sea el equivalente internacional de \ w (y por lo tanto \ W) –
Su expresión regular sería algo como ...
/[,[email protected]#$%^&*()\u9999]/
Donde reemplazar cada \u9999
con el punto de código Unicode para los otros caracteres de puntuación.
Si puede encontrar un grupo en un rango , puede especificarlo con el operando de rango -
, p. \u9990-\u9999
.
Por lo que yo sé, no puede usar algo como \pP
en expresiones regulares de JavaScript.
. No es necesario que hagas una Caracteres: aún puede hacer rangos como '[\ u9000- \ u9999]' (es un ejemplo de sintaxis, no tiene idea de qué caracteres podría representar). –
@PeterBoughton: Acabo de editar eso en :) – alex
Agregando a la respuesta de @ stema (https://stackoverflow.com/a/7578937/114140) ... aquí está la expresión regular como una cadena (por lo que no necesita hinchar su proyecto con XRegExp).
!-#%-\x2A,-/:;\[email protected]\x5B-\x5D_\x7B}\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\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\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
he utilizado esto en mi propio proyecto con algunas adiciones ...
// any kind of punctuation character (including international e.g. Chinese and Spanish punctuation)
// author: http://www.regular-expressions.info/unicode.html
// source: https://github.com/slevithan/xregexp/blob/41f4cd3fc0a8540c3c71969a0f81d1f00e9056a9/src/addons/unicode/unicode-categories.js#L142
// note: XRegExp unicode output taken from http://jsbin.com/uFiNeDOn/3/edit?js,console (see chrome console.log), then converted back to JS escaped unicode here http://rishida.net/tools/conversion/, then tested on http://regexpal.com/
// suggested by: https://stackoverflow.com/a/7578937
// added: extra characters like "$", "\uFFE5" [yen symbol], "^", "+", "=" which are not consider punctuation in the XRegExp regex (they are currency or mathmatical characters)
// added: \u3000-\u303F Chinese Punctuation for good measure
var regex_characters_to_remove = /[\$\uFFE5\^\+=`~<>{}\[\]|\u3000-\u303F!-#%-\x2A,-/:;\[email protected]\x5B-\x5D_\x7B}\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\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\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]+/g
de Python para esta expresión regular para eliminar desde el principio y el fin de cualquier tipo de signos de puntuación:
import re
def cleanspecialcharacters(str):
regex = re.compile((
'^[/\"_\(\)&*\$¥\^\+=`~<>\{\}\[\]\|\-!#%\,\:;@¡§«¶·»¿;·՚-՟։֊؉،॥॰෴๏๚๛༄-༒༔༺-༽྅჻፠-፨᐀᙭᙮។-៖៘-៚‧‰-⁃⁅-⁑⁓-⁞⁽⁾₍₎、〃〈-【】〔-〟〰〽゠・﴾﴿︐-︙︰-﹒﹔-﹡﹣﹨﹪﹫!-#%-*,-/:;?@[-]_{}⦅-・〔〕《》]*|'
'([/\"_\(\)&*\$¥\^\+=`~<>\{\}\[\]\|\-!#%\,\:;@¡§«¶·»¿;·՚-՟։֊؉،॥॰෴๏๚๛༄-༒༔༺-༽྅჻፠-፨᐀᙭᙮។-៖៘-៚‧‰-⁃⁅-⁑⁓-⁞⁽⁾₍₎、〃〈-【】〔-〟〰〽゠・﴾﴿︐-︙︰-﹒﹔-﹡﹣﹨﹪﹫!-#%-*,-/:;?@[-]_{}⦅-・〔〕《》])*$'))
str = regex.sub('', str)
return str
- 1. iterador expresión JavaScript regular para extraer grupos
- 2. Expresión regular para formatear números en JavaScript
- 3. Javascript nueva expresión regular de la cadena
- 4. ¿Expresión regular para encontrar una expresión regular?
- 5. Expresión regular de Javascript para validar la URL
- 6. Expresión regular para la URL
- 7. JavaScript Expresión de correo electrónico de expresión regular
- 8. expresión regular para DOT
- 9. Expresión regular para Dummys
- 10. Expresión regular de Javascript Eliminar espacios
- 11. Expresión regular para alfanumérico
- 12. JavaScript Expresión regular "Carácter de espacio único"
- 13. ¿Cuál es la expresión regular para la validación del número de teléfono internacional en php o zend?
- 14. Javascript subcadena partido después de expresión regular
- 15. de colon dentro de una expresión regular para Javascript
- 16. Expresión regular de Javascript para valores de rgb
- 17. Expresión regular para la validación de contraseña
- 18. ¿Hay una expresión regular para detectar una expresión regular válida?
- 19. Expresión regular simple de javascript para eliminar números
- 20. coincidencia de expresión regular en la
- 21. Ruby 1.9 y Javascript expresión regular
- 22. ¿Incluye caracteres árabes en la expresión regular de JavaScript?
- 23. JavaScript excepción expresión regular (Grupo no válido)
- 24. Aspecto positivo en la expresión regular de JavaScript
- 25. URL expresión regular no funciona en javascript
- 26. expresión regular usando Javascript val() partido() método
- 27. Hacer una expresión regular de JavaScript equivalente a una expresión regular PHP
- 28. expresión regular "contiene" otra expresión regular
- 29. paso variable para una expresión regular en javascript
- 30. javascript expresión regular para que no coincida con una palabra
Teniendo en cuenta lo malo que son las expresiones regulares de JavaScript y el soporte Unicode, no creo que haya nada más que enumerar todos los caracteres que desea incluir. – NullUserException
PD: ¿Cuándo '@ # $%^& *' se convirtieron en signos de puntuación? – NullUserException
desde que aparecieron dos ojos comenzó a aparecer al final de un nombre :-) – RHT