Hilo oficial: Solicitudes de Expresiones Regulares

(1/6) > >>

WHK:


Hola, inicio este hilo para todo aquel que necesite una regla en expresión regular pero no tiene el conocimiento para hacerlo.

¿Cuantas veces hemos querido crear una regla con redirección de urls en apache o filtrar archivos en c# o parsear campos en Java y no lo podemos hacer porque no sabemos Exmpresiones regulares o son muy complejas?

Bueno, este hilo es para todos los que se sientan identificados con ello. No te sientas mal por no saber sobre Expresiones regulares, nadie nace con una enciclopedia bajo el brazo, todos aprendemos en algún momento, yo antes no sabía, ahora se algo y por eso quiero ayudar también a todo el que lo necesite.

Si eres una persona con conocimientos en Expresión regular entonces puedes ayudar a los que lo necesiten.


Herramientas para validar Expresiones, probar ejemplos y postearlos en el foro:

Validación de expresiones online
http://regexr.com/

Ejecución online de código javascript, CSS y HTML
https://jsfiddle.net/

Ejecución online de código ejecutable e interpretable:
http://runnable.com/


Bienvenidos todos y Enjoy!

Pablo Videla:
Excelente iniciativa, necesito expresiones regulares que detecte un apellido compuesto como un unico apellido por ejemplo:

Pedro De Videla Torres

De videla = 1er apellido, torres 2do apellido

Ena von Baer  Guzman

  von Baer 1er apellido Guzman 2do apellido.

Espero que se entienda =P Saludos y gracias de antemano  :)

WHK:
Te sirve así?
Código:

/([a-z]+\s+(de\s+la|de)\s+[a-z]+)/i

Primero busca una palabra que sería el primer nombre compuesto sobre el apellido con [a-z]+ el cual debe ser obligatorio, luego debe contener un espacio o tabulación , luego la concatenación común "de o de la como por ejemplo: de la costa", luego otro espacio y al final el último apellido. El argumento "i" es para que no sea sensible a las mayúsculas, en caso contrario habría que reemplazar [a-z] por [a-zA-Z].

Edito, agrego caracteres latinos:
Código:

/([a-zñÑáéíóúÁÉÍÓÚ]+\s+(de\s+la|de)\s+[a-za-zñÑáéíóúÁÉÍÓÚ]+)/i
ya que las exmpresiones regulares por defecto se trabajan en utf-8 sin soporte para carácteres latinos dependiendo del lenguaje de programación:





Saludos.

Edito otraves,... acabo de ver tu edición xD, pues es dificil ya que todas las palabras ya sean nombres o apellidos cumplen con las mismas reglas, lo único que se me ocurre es tener una base de datos con nombres y apellidos y hacerles match con sql o similar. Por lo menos la expresión anterior te detecta apellidos que contenga "de" y "de la", se puede modificar para agregar mas tipos de concatenaciones.

Ejemplo online:
http://regexr.com/3ave5

Pablo Videla:
Gracias por la respuesta estoy probando pero no me resulta, hice este mini script para probar xD  y me dice nop, probe con "Pablo de videla torres" "pablo de la torre" "pablo de la torre guzman" cosas al azar pero no me da

Código
 
 
function valida(){
var prueba = "/([a-zñÑáéíóúÁÉÍÓÚ]+\s+(de|la)\s+[a-za-zñÑáéíóúÁÉÍÓÚ])/i";
var campo = document.getElementById("campo");
alert(campo.value);
if ((campo.value.match(prueba)) && (campo.value!='')) {
       alert('expresion Correcta');
   } else {
       alert("nop");
       campo.focus();
   }
}
 
 
 

Código
<input type="text" id="campo"></input>
<button id="bt" onclick="valida()">Prueba</button>

WHK:
Porque faltó el último apellido, prueba con este para validar el último apellido:
Código:

/([a-zñÑáéíóúÁÉÍÓÚ]+\s+((de\s+la|de)\s+)*[a-zñÑáéíóúÁÉÍÓÚ]+(\s+)*([a-zñÑáéíóúÁÉÍÓÚ]+)*)/i

Invertí las reglas, ahora la concatenación "de" y "de la" con opcionales y solo permite dos apellidos incluyendo uno concatenado aunque el último también es opcional.

Código
function valida(){
var prueba = "/([a-zñÑáéíóúÁÉÍÓÚ]+\s+((de\s+la|de)\s+)*[a-zñÑáéíóúÁÉÍÓÚ]+(\s+)*([a-zñÑáéíóúÁÉÍÓÚ]+)*)/i";
var campo = document.getElementById("campo");
alert(campo.value);
if ((campo.value.match(prueba)) && (campo.value!='')) {
alert('expresion Correcta');
} else {
alert("nop");
campo.focus();
}
}

Pablo de videla torres -> Válido
pablo de la torre -> Válido
pablo de la torre guzman -> Válido
Pablo guzman -> Válido
pablo de la torre guzman abc def ghi -> inválido

Si quieres que la validación sea obligadamente apellidos concatenados entonces reemplaza ((de\s+la|de)\s+)* por ((de\s+la|de)\s+)+

Recuerda trabajar siempre con UTF-8 o si no tendrás que utilizar secuencia de escape para carácteres unicode en javascript o hexadecimales vy agregar múltiples condicionales para múltiples codificaciones, por eso mejor usa siempre utf-8 y no tendrás problemas con las validaciones en los acentos..

Navegación

[0] Índice de Mensajes

[#] Página Siguiente