[RETOS] Expresiones Regulares

Iniciado por criskapunk, 23 Agosto 2011, 22:57 PM

0 Miembros y 1 Visitante están viendo este tema.

criskapunk

Buenas chicos, después de la aprobación de Nov, les traigo este post :P


Reglas: (Más que nada algunas recomendaciones para poder mantener el orden en el hilo).


  • Los retos se dividirán en tres niveles (Fácil - Medio - Difícil).
  • Podrá haber simultáneamente un máximo de UN reto de cada dificultad.
  • Cada reto tendrá una duración máxima de 12 horas. Pasado ese tiempo, si no se resuelve, se podrá publicar uno nuevo.
  • Una vez que el autor del reto de por válida una respuesta, deberá publicar la propia solución al desafío.
  • Se podrán publicar soluciones alternativas a retos antiguos, no hay problema con eso, la idea es practicar.

Acá les dejo el primero, si quieren pueden usar una plantilla similar a la siguiente:

Dificultad: 2 - Medio.
Reto: Realizar una expresión regular que valide nombres. Los mismos podrán ser simples o compuestos (Una o dos palabras). Unicamente podrán contener letras y las letras mayúsculas podrán aparecer sólo al principio de las palabras.

Cuando llego a casa publico la respuesta, que ya terminó mi horario laboral xD.

Un saludo y espero que les guste! :D

Darkgold9

#1


([A-Z]?[a-záéíóú]*) | ([A-Z]?[a-záéíóú]*\S [A-Z]?[a-záéíóú]*)



Aqui sta mi propuesta.

Saludos

criskapunk

Yo la había pensado así:

^[a-zA-Z]?[a-z]+(\s[a-zA-Z]?[a-z]+)?

Pero por ejemplo, la mía no valida tildes y acepta como valido palabras de una sola letra. Voy a tener que ser más específico para la próxima :xD

@Darkgold9
Tu expresión (Según esta página) valida una única palabra solo si al final de la misma agregás un espacio. Además, no valida más de una palabra y toma como correcto escribir únicamente un espacio.

Un saludo y gracias por participar.


Shell Root

Código (php) [Seleccionar]
$sExpReg = '/^([a-záéíóúA-ZÁÉÍÓÚ]|(\s))*$/';

@R0LFback, para qué el operador ? en tu expresión?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

criskapunk

@Shell Root:
Porque la segunda palabra puede o no estar. Te referís a ese o al ? del comienzo?

Tu expresión supera el límite de dos palabras :P Además acepta como válido solo espacios en blanco.

Un saludo.

Shell Root

Hay nombres con espacios vacíos, -es mentiras, ajajjaja este no es mi fuerte-


La primera, se supone qué al usar [a-zA-Z] se puede ingresar una mayúscula o minúscula.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

criskapunk

Jaja! Un nombre escrito en Whitespace

Lo del ? es por esto que puse en el primer post:

Citarlas letras mayúsculas podrán aparecer sólo al principio de las palabras

Pueden aparecer o no.

Un saludo.

Shell Root

Al parecer no entiendes lo que te quiero decir, intetad ejecutar lo siguiente,

Código (php) [Seleccionar]
^[a-zA-Z]+(\s[a-zA-Z]?[a-z]+)?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Valkyr

Yo propondría esta:


[A-Z]?[a-z]+( [A-Z]?[a-z]+)?


Reconoce nombres que empiecen por mayúsculas y pueden tener uno o dos nombres, y además los que empiecen por minúsculas.

Saludos.

Shell Root

#9
@Valkyr, faltan las tildes, para nombres como Héctor.

Código (php) [Seleccionar]
^[A-ÁÉÍÓÚa-záéíóúA]+( [A-ZÁÉÍÓÚa-záéíóúA]+)$
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.