2012-01-19 30 views
9

Problema simple: un proyecto existente me permite agregar campos adicionales (con comprobaciones adicionales en esos campos como expresiones regulares) para admitir formularios de entrada personalizados. Y necesito agregar un nuevo formulario pero no puedo cambiar cómo funciona este proyecto. Este formulario permite que un visitante ingrese su nombre y apellido más las iniciales. Entonces, el RegEx ^[a-zA-Z.]*$ funcionó bien por ahora.
Entonces alguien notó que no aceptaría caracteres diacríticos como entrada. No se aceptó como válido un nombre turco como Ömür. Sin embargo, debe ser aceptado.Comprobación de diacríticos con una expresión regular

Así que tienen dos opciones:

  1. quite la marca por completo, lo que permitiría a los usuarios introducir la basura.
  2. Escribe una expresión regular que también incluya letras diacríticas pero que aún no tenga dígitos, espacios u otras letras que no sean letras.

Como no puedo cambiar el código del proyecto, solo tengo estas dos opciones. Preferiría la opción 2, pero ahora me pregunto cuál debería ser el RegEx adecuado. (El proyecto está escrito en C# 4.0.)

+0

¿Qué vas a hacer con alguien que legalmente cambia la forma escrita de su nombre para que sea la secuencia de caracteres "42 79"? Algunas personas hacen cosas estúpidas como esa ... –

+0

Bueno, alguien llamado "42 79" se ingresaría como "Fourtytwo Zeventynine". :-) Además, no todos los países permiten que sus ciudadanos sean tan estúpidos. :-) –

+1

Dejando de lado la regulación local, si mi nombre fuera "42 79" y alguien lo pusiera en alguna DB poxy como "Fourtytwo Zeventynine", les exigiría que cambien su DB porque sería formalmente incorrecto. Más concretamente, las personas _so_ tienen nombres de varias palabras (que pueden ser o no fáciles de capitalizar) y nombres de familia con apóstrofes en (común en los apellidos irlandeses) y una gran cantidad de otras cosas. Los nombres son difíciles de validar. –

Respuesta

21

Usted puede utilizar el escape específica Unicode para cartas - \p{L} (esto incluirá los A-Za-z rangos):

^[.\p{L}]*$ 

Ver en regularexpressions.info:

\ p {L} o \ p {Carta}

Coincide con un único punto de código Unicode que tiene la propiedad "carta". Consulte Propiedades de caracteres Unicode en el tutorial para obtener una lista completa de propiedades. Cada punto de código Unicode tiene exactamente una propiedad. Puede ser utilizado dentro de las clases de caracteres.

+1

Si agrega '\ p {L}' a la clase de caracteres, puede eliminar 'a-zA-Z'. – stema

+0

@stema - Buena captura. Respuesta actualizada – Oded

+0

¡Buena solución! Problema resuelto. –

Cuestiones relacionadas