Buenas chicos, después de la aprobación de Nov, les traigo este post :P
(http://img64.imageshack.us/img64/2492/logoext.png)
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
([A-Z]?[a-záéíóú]*) | ([A-Z]?[a-záéíóú]*\S [A-Z]?[a-záéíóú]*)
Aqui sta mi propuesta.
Saludos
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 (http://gskinner.com/RegExr/) 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.
$sExpReg = '/^([a-záéíóúA-ZÁÉÍÓÚ]|(\s))*$/';
@R0LFback, para qué el operador ? en tu expresión?
@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.
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.
Jaja! Un nombre escrito en Whitespace (http://es.wikipedia.org/wiki/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.
Al parecer no entiendes lo que te quiero decir, intetad ejecutar lo siguiente,
^[a-zA-Z]+(\s[a-zA-Z]?[a-z]+)?
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.
@Valkyr, faltan las tildes, para nombres como Héctor.
^[A-ÁÉÍÓÚa-záéíóúA]+( [A-ZÁÉÍÓÚa-záéíóúA]+)$
@Shell Root:
Esa expresión permite en la primer palabra que todas las letras sean mayúsculas. Solo pueden ir al principio de cada una.
@Valkyr:
Funciona perfecto :D Cumple con los requisitos que puse en el primer post. Te toca postear reto.
Un saludo.
Shell Root, no puse tildes porque en el primer post no especificaba que los nombres pudiesen llevar tildes, sí quisiesemos que la expresión regular reconociese muchos más nombres habría que hacer exactamente lo que dices.
De acuerdo, pues yo propongo este:
Expresión regular para buscar cadenas que vayan entre comillas, sin comillas dentro y que puedan ocupar varias líneas.Tendría que reconocer las siguientes cadenas (las que están subrayadas):
Citar" Hola señores" "Comillas comillas y comillas" " "
"Reto de expresiones
regulares
elhacker.net
"
Iré revisando las respuestas para ver qué proponeis. Yo ya tengo la mía hecha, cuando alguien proponga alguna que lo resuelva posteo la mia.
Saludos.
(\"[^\"]*\")+
Aki va la mia
Saludos
^"[\w?\s?(\r\n)?]*"$
Edit: Me compliqué demasiado parece :xD No sabía que había que escapar las comillas, por eso no me funcionaba la expresión.
Un saludo.
Darkgold9 la tuya funciona perfectamente, lo único que puedo poner de pega es que la barra de escape no es necesaria, sería necesaria si por ejemplo estuviésemos programando y al crear una cadena de texto esa cadena contuviese comillas dentro, pero para las expresiones regulares como tal, no es necesario, aún así funciona correctamente. Te paso el testigo y te toca reto xD.
R0LFback la que propones no es correcta. Me parece que sobran las ?, además, al colocar el paréntesis lo toma como el carácter que es, no como un conjunto. Tampoco reconoce los que están en varías líneas.
Saludos a todos.
Edito: Error mío, perdón.
CitarDarkgold9 la tuya funciona perfectamente, lo único que puedo poner de pega es que la barra de escape no es necesaria, sería necesaria si por ejemplo estuviésemos programando y al crear una cadena de texto esa cadena contuviese comillas dentro, pero para las expresiones regulares como tal, no es necesario, aún así funciona correctamente. Te paso el testigo y te toca reto xD.
Lo tendre en cuenta thx :).
Pues aqui va mi reto:
Expresion regular que reconozca una
cadena con formato horario, es decir,
con el patrón HH:MM (H = hora, M= minuto) o bien con el patrón H:MM.
Tener en cuenta que las horas deben ser correctas. Por ejemplo: 29:80 no valdria.
Ejemplos:
01:00
00:00
23:50
2:38
...
Propongo la siguiente expresión regular:
(([0-1]\d|2[0-3])|\d):[0-5]\d
Reconoce los ejemplos que has puesto xD.
Saludos.
CitarPropongo la siguiente expresión regular:
Código:
(([0-1]\d|2[0-3])|\d):[0-5]\d
Reconoce los ejemplos que has puesto xD.
Saludos.
Exacto, es exactamente la misma que habia hecho yo :xD.
A ver si alguien mas se anima, te paso el poder >:D :laugh:
Buenas chicos,
Esa expresión no valida bien. Devuelve lo siguiente:
0:00 Formato valido
00:00 Formato valido
23:59 Formato valido
24:00 Formato valido
100:00 Formato valido
12:000 Formato valido
8:10 Formato valido
08:10 Formato valido
001:05 Formato valido
99:00 Formato valido
Mi expresión es así (Hay que agregarle únicamente el ^ y $ :xD).
^([0-1]\d|2[0-3]|(\d)):([0-5]\d)$
0:00 Formato valido
00:00 Formato valido
23:59 Formato valido
24:00 Formato invalido
100:00 Formato invalido
12:000 Formato invalido
8:10 Formato valido
08:10 Formato valido
001:05 Formato invalido
99:00 Formato invalido
Les dejo el script que utilicé.
<?php
$cadenas = array (
0=>"0:00",
1=>"00:00",
2=>"23:59",
3=>"24:00",
4=>"100:00",
5=>"12:000",
6=>"8:10",
7=>"08:10",
8=>"001:05",
9=>"99:00",
);
$patron = "/^([0-1]\d|2[0-3]|(\d)):([0-5]\d)$/";
for($i = 0; $i < count($cadenas); $i++)
{
if (preg_match($patron, $cadenas[$i]))
{
print $cadenas[$i];
print " Formato valido<br>";
} else
{
print $cadenas[$i];
print " Formato invalido<br>";
}
}
?>
Un saludo.
Como no publicaron nada todavía, para que no muera el hilo les dejo otro reto.
Validar fechas con el siguiente formato: dd/mm/aaaa.
(La cadena 1/2/2000 no sería válida. Tendría que ser 01/02/2000, por ejemplo).
- Comprobar si la cantidad de días es correcta para el mes en cuestión. Por ejemplo, no sería correcta 30/02/2000. Para Febrero tomamos como valor de 28 días, sin considerar años bisiestos (No se si esto se podrá hacer con RegExp xD).
- El intervalo de años debe estar entre 1900 y 2050.
Edito:
Ya la terminé. Es ILEGIBLE :P
Un saludo.
^(?>3[01]|0[1-9]|[12]\d)/(?>(?<=(?>0[1-9]|[12]\d)/)(?>0[1-9]|1[012])|(?<=31/)(?>0[13578]|1[02])|(?<=30/)(?>0[13-9]|1[012]))/(?>19\d\d|20[0-4]\d|2050)$
Pruebenlo :P me costo un poco
PD: No se sabe si el año es bisiesto o no :xD y creo que eso no se puede saber
No se porque no funciona con 30/12/2011, esta correcta la fecha no?, y falta validar 00/12/2011, 00/00/2011, 01/13/2011
Raul, tu expresión toma como válidos los años del 2051 al 2059. Era hasta el 2050 inclusive.
Edito:
@Shell Root: Las fechas 00/12/2011 y 00/00/2011 no se tienen que validar, no existen los días o meses cero.
Un saludo y gracias por participar :P
¬¬ Crees que soy estupido o que? Obviamente no, pero la ExpReg la filtra como si fuera una fecha correcta.
No era para que te lo tomes a mal. Entendí mal tu mensaje. Disculpas.
Un saludo.
Perdón por no haber posteado ningún reto pero me ha sido imposible conectarme apenas más de cinco minutos.
Yo he sacado esta expresión, es un poco engorrosa pero creo que puede valer:
^((0[1-9]|[12]\d)/(0[13-9]|1[0-2])|28/02|3(0/(04|06|09|11)|1/(01|03|05|07|08|10|12)))/(19\d\d|20([0-4]\d|50))$
Supongo que quizás podría simplificarse pero no es cuestión de matarme mirando la expresión a estas horas.
Saludos.
Ya arregle la mía ;D
@Valkyr link: Tu Expresion regular no me toma como valida estas fechas
30/07/2000
01/02/2000
Edit, estas fechas deberian ser validas
31/07/2000
30/07/2000
01/02/2000
25/05/2002
15/07/2000
28/02/2001
31/05/2001
30/12/2011
29/02/2001
y estas no
01/00/2011
31/04/2001
00/12/2011
00/00/2011
01/13/2011
30/02/2001
25/05/2051
Emmm no @raul338,
Intentad con 01/00/2011
Cita de: Shell Root en 27 Agosto 2011, 06:24 AM
Emmm no @raul338,
Intentad con 01/00/2011
Editado :D
Bueno pues... ya que no hubo actividad... propongo el reto :3
el reto es validar una URI en todas sus formas :3 desde http://hola/ hasta http:8080//en.misitio.gov.ar/carpeta/archivo/1.html?aaa=eee&iii=ooo#una
:P