Foros del Web » Programando para Internet » PHP »

mes y dia y expressiones regulares

Estas en el tema de mes y dia y expressiones regulares en el foro de PHP en Foros del Web. estaria bien solo puedan elegir una letra y solo un sexo $letra_dni_cliente = $_POST["letra_dni_cliente"]; $sexo_cliente = $_POST["sexo_cliente"]; $validacion_letra_dni_cliente="/[abcdefghjklmnpqrstvwxyz]/"; $validacion_sexo_cliente ="/[hombre][mujer]/"; if( preg_match( $validacion_letra_dni_cliente, $letra_dni_cliente ) ...
  #1 (permalink)  
Antiguo 20/08/2011, 04:42
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
expressiones reguleres i php

estaria bien solo puedan elegir una letra y solo un sexo

$letra_dni_cliente = $_POST["letra_dni_cliente"];
$sexo_cliente = $_POST["sexo_cliente"];

$validacion_letra_dni_cliente="/[abcdefghjklmnpqrstvwxyz]/";
$validacion_sexo_cliente ="/[hombre][mujer]/";


if(
preg_match( $validacion_letra_dni_cliente, $letra_dni_cliente ) &&
preg_match( $validacion_sexo_cliente, $sexo_cliente ) {

}
  #2 (permalink)  
Antiguo 20/08/2011, 05:13
Avatar de Hazuki  
Fecha de Ingreso: mayo-2011
Mensajes: 34
Antigüedad: 12 años, 11 meses
Puntos: 7
Respuesta: expressiones reguleres i php

Primero que nada, lo que sea código envuélvelo dentro de las etiquetas correspondientes para que los lectores del foro podamos leer mejor.

Segundo, creo que deberías repasar las expresiones regulares, ya que:

Código PHP:
$validacion_letra_dni_cliente="/[abcdefghjklmnpqrstvwxyz]/";

// Se puede resumir en:
$validacion_letra_dni_cliente="/[a-z]/"
Y creo que querías hacer otra cosa en esta línea:
Código PHP:
$validacion_sexo_cliente ="/[hombre][mujer]/"
Cuando utilizas corchetes, coincide CUALQUIERA de los caracteres que se encuentren dentro, salvo unas excepciones. Es decir, en esa línea te coincidiría cualquier palabra que tenga una letra del primer corchete y una del segundo. Creo que lo que quieres hacer es:

Código PHP:
$validacion_sexo_cliente ="/hombre|mujer/"
¿Correcto? ¿o te entendí mal?
  #3 (permalink)  
Antiguo 22/08/2011, 06:42
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: expressiones reguleres i php

gracias Hazuki

con respecto el sexo me a quedado claro

pero en le letra no

abcdefghjklmnpqrstvwxyz

estas letras no se utilizan en el dni
i, ñ, o, u

se podria hacer a | b |c
o de alguna otra forma de la a-z menos i ñ o u
  #4 (permalink)  
Antiguo 22/08/2011, 11:29
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: expressiones reguleres i php

Te recomiendo que leas este aporte, con leerlo haces lo que necesitas y mucho más:

http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 24/08/2011, 09:28
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
mes y dia y expressiones regulares

no me funciona
Del dia 4 al 9
del mes 3-9

me funcionan
el dia 1,2,3,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 ,25,26,27,28,29,30,31
el mes 1,2,10,11,12

tengo un problema con mes y dia pero no se si son las expressiones regulares

los años me funcionan todos 1920-1993

1-1-1920 pude hacer el insert a la base de datos con el codigo que viene a continuacion
4-3-1920 no puede hacer el insert

Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2.     <head>
  3.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4.         <title></title>
  5.     </head>
  6.     <body>
Código PHP:
<?php
$dia_nacimiento_cliente 
$_POST["dia_nacimiento_cliente"];
$mes_nacimiento_cliente $_POST["mes_nacimiento_cliente"];
$año_nacimiento_cliente $_POST["año_nacimiento_cliente"];

$validacion_dia_nacimiento_cliente "/[1-31]/";
$validacion_mes_nacimiento_cliente "/[1-12]/";
$validacion_año_nacimiento_cliente "/[1920-1993]/";
if(isset(
$_POST['submit']))
{
    if( 
       
preg_match$validacion_dia_nacimiento_cliente$dia_nacimiento_cliente ) &&
       
preg_match$validacion_mes_nacimiento_cliente$mes_nacimiento_cliente ) &&
       
preg_match$validacion_año_nacimiento_cliente$año_nacimiento_cliente 
      ){
          
          
$fecha_nacimiento_cliente $año_nacimiento_cliente '-' $mes_nacimiento_cliente '-' $dia_nacimiento_cliente;
        
        
$hostname="*";
        
$user="*";
        
$password="*";
        
$database="*";
            
            
$link mysqli_connect($hostname,$user,$password,$fechabase);
            
              
$query_insert_cliente =
        
            
'INSERT INTO clientes (fecha_nacimiento_cliente)
            VALUES(\'' 
$fecha_nacimiento_cliente  '\');';
   
            
$result_insert_cliente mysqli_query($link,$query_insert_cliente);
      }
      else
      {
            
$validacion_dia_nacimiento_cliente "/[1-31]/";
            if( !
preg_match($validacion_dia_nacimiento_cliente$dia_nacimiento_cliente ))
            {
                
$dia_nacimiento_cliente_error 'Introduzca el dia ex: 1<br/>';
            }
            
            
$validacion_mes_nacimiento_cliente "/[1-12]/";
            if( !
preg_match($validacion_mes_nacimiento_cliente$mes_nacimiento_cliente ))
            {
                
$mes_nacimiento_cliente_error 'Introduzca el mes ex: Agost<br/>';
            }

            
$validacion_año_nacimiento_cliente "/[1920-1993]/";
            if( !
preg_match($validacion_año_nacimiento_cliente$año_nacimiento_cliente ))
            {
                
$año_nacimiento_cliente_error "Introduzca el año ex: 1980<br/>";
            }
            
            
    }
}
?>
Código HTML:
Ver original
  1. <form action="formulario_de_registro.php" method="post">
  2.             <label for="dia_nacimiento_cliente">Dia: *</label>
  3.               <select id="dia_nacimiento_cliente" name="dia_nacimiento_cliente">
  4.                 <option value="" selected="selected"> - Selecciona una Dia - </option>
  5.                     <optgroup label="Dia">
Código PHP:
    <?php
                  
                    
for($dia_nacimiento_cliente_for 1$dia_nacimiento_cliente_for <=31$dia_nacimiento_cliente_for++){
                         echo 
$dia_nacimiento_cliente_for;
                    
?>
                        <option value="<?php if(isset($dia_nacimiento_cliente_for)) echo $dia_nacimiento_cliente_for ?>"
                   <?php
                        
if($dia_nacimiento_cliente_for == $dia_nacimiento_cliente ){
                            echo 
'selected="selected"';

                        }
                        echo 
">" $dia_nacimiento_cliente_for "</option>";
                    }
                    
?>
Código HTML:
Ver original
  1.               </select>
  2.              
  3.                 -
  4.                
  5.                 <label for="mes_nacimiento_cliente">Mes: *</label>
  6.                 <select id="mes_nacimiento_cliente" name="mes_nacimiento_cliente">
  7.                 <option value="" selected="selected"> - Selecciona una Mes - </option>
  8.                     <optgroup label="Mes">
Código PHP:
     <?php
                    $array_mes_nacimiento_cliente 
= array( =>"Enero"=>"Febrero"=>"Marzo"=>"Abril"=>"Mayo"=>"Junio"=>"Julio"=>"Agosto"=>"Setiembre"10 =>"Octubre"11 =>"Noviembre"12 =>"Diciembre");
                    for(
$mes_nacimiento_cliente_for 1$mes_nacimiento_cliente_for <=12$mes_nacimiento_cliente_for++){
                         echo 
$mes_nacimiento_cliente_for;
                    
?>
                        <option value="<?php if(isset($mes_nacimiento_cliente_for)) echo $mes_nacimiento_cliente_for ?>"
                    <?php
                        
if($mes_nacimiento_cliente_for == $mes_nacimiento_cliente ){
                            echo 
'selected="selected"';
                        }
                        echo 
">" $array_mes_nacimiento_cliente[$mes_nacimiento_cliente_for] . "</option>";
                    }
                    
?>
Código HTML:
Ver original
  1.               </select>
  2.    
  3.  
  4.               -
  5.  
  6.                <label for="año_nacimiento_cliente">Año: *</label>
  7.                <select id="año_nacimiento_cliente" name="año_nacimiento_cliente">
  8.                 <option value="" selected="selected"> - Selecciona una Año - </option>
  9.                     <optgroup label="Año">
Código PHP:
<?php
                    
for($año_nacimiento_cliente_for 1920$año_nacimiento_cliente_for <=1993$año_nacimiento_cliente_for++){
                    echo 
$año_nacimiento_cliente_for;
                    
?>
                        <option value="<?php if(isset($año_nacimiento_cliente_for)) echo $año_nacimiento_cliente_for ?>"
                    <?php
                        
if($año_nacimiento_cliente_for == $año_nacimiento_cliente ){
                            echo 
'selected="selected"';
                        }
                        echo 
">" $año_nacimiento_cliente_for "</option>";
                    }
                    
?>
Código HTML:
Ver original
  1.              </select><br/>
Código PHP:
Ver original
  1. <?php echo $dia_nacimiento_cliente_error;
  2.               echo $mes_nacimiento_cliente_error;
  3.               echo $año_nacimiento_cliente_error;?>

Código HTML:
Ver original
  1. <br/><input type="submit" name="submit" value="submit"/>
  2.         </form>
  3.     </body>
  4. </html>

Última edición por albertrc; 24/08/2011 a las 09:59
  #6 (permalink)  
Antiguo 24/08/2011, 10:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: mes y dia y expressiones regulares

Lo que sucede es lo siguiente:
Cita:
/[1-31]/
/[1-12]/
/[1920-1993]/
Estas expresiones no funcionan como imaginas, los rangos solo consisten de dos caracteres: [a-z], [0-9] etc... cualquier otro carácter no se considera para el rango.

En la primer expresión: /[1-31]/ lo único que está validando es la presencia de algún numero del 1 al 3, pues el último 1 ya está declarado.

Mira un ejemplo claro de lo que hace:
Código PHP:
echo preg_match('/^[1900-2000]$/'1912) ? : -1
Esto siempre te va a dar -1 aunque creas que 1912 está dentro del rango [1900-2000], pero sigue habiendo un error, y si hacemos esto:
Código PHP:
echo preg_match('/[1900-2000]/'99) ? : -1
Nos dará siempre 1, y así:
Código PHP:
echo preg_match('/[1900-2000]/'88) ? : -1
Nos dará -1 pues el 8 no esta dentro del rango, en resumen, la expresión [1920-1933] considerará solo los números 1,9,2,0-1(rango),9,3,3 y no de otra forma.

Espero que te quede claro cual es tu error.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 24/08/2011, 10:54
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: mes y dia y expressiones regulares

[1|2] hasta el 12 y lo mismo anta el 31, pero de 1920 a 1993 como lo hago,
esto podría ser una solución no del 1920 al 1993 tendría que hacer a lo mejor un for que separe los valores |

respecto a estos otros campos ya que veo que dominas el php y las expresiones regulares como lo ves

Código PHP:
Ver original
  1. <?php
  2. numero_dni_cliente = "/[0-9]{8,8}/";
  3. letra_dni_cliente ="/[a|b|c|d|e|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z]/";
  4. sexo_cliente ="/[hombre|mujer]/";
  5. nombre_cliente = "/[A-Za-z]{2,15}/";
  6. primer_apellido_cliente = "/[A-Za-z]{2,15}/";
  7. segondo_apellido_cliente = "/[A-Za-z]{2,15}/";
  8. usuario_connexion = "/[A-Za-z0-9_-]{4,15}/";
  9. usuario_password = "/[A-Za-z0-9_-]{8,15}/";
  10. ?>
  #8 (permalink)  
Antiguo 25/08/2011, 10:29
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
expressiones regulares

<?php
numero_dni_cliente = "/[0-9]{8,8}/";
8 digitos del 0 al 9 estaria bien

letra_dni_cliente ="/[a|b|c|d|e|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z]/";
letras de dni

sexo_cliente ="/[hombre|mujer]/";

nombre_cliente = "/[A-Za-z]{2,15}/";
nombre del cliente 2 a 15 caractres a a la z aunque cuando lo guardo en la base de datos
antes lo convierto a strtolower i lo mismo en primer y segundo apellido

primer_apellido_cliente = "/[A-Za-z]{2,15}/";

segondo_apellido_cliente = "/[A-Za-z]{2,15}/";

usuario_connexion = "/[A-Za-z0-9_-]{4,15}/";
usuari connexion a a la z tanto minisculas como mayusculas como numeros i letras
de 4 a 15 caracteres, guio bajo i guion altro se podria añadir algun otro caracter en el
nick

usuario_password = "/[A-Za-z0-9_-]{8,15}/";
usuario password a a la z tanto minisculas como mayusculas como numeros i letras
de 8 a 15 caracteres, guio bajo i guion altro se podria añadir algun otro caracter en el

estos 3 no me funcionan bien
dia_nacimiento_client = "/[1-31]/";
mes_nacimiento_client = "/[1-12]/";
año_nacimiento_client = "/[1920-1993]/";


?>
  #9 (permalink)  
Antiguo 25/08/2011, 11:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expressiones regulares

Creo que esto ya lo habíamos visto, ¿verdad?

Estas expresiones están mal:
Cita:
/[a|b|c|d|e|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z]/
/[hombre|mujer]/
/[0-9]{8,8}/
Lo correcto sería:
Cita:
/[a-hj-tv-z]/
/(?:hombre|mujer)/
/[0-9]{8}/
Las últimas expresiones ya las habíamos discutido en un tema que abriste anteriormente, debes aprender a formular expresiones regulares con sentido.

Te invito a leer lo siguiente:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 29/08/2011, 02:23
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: mes y dia y expressiones regulares

creo que así estaría bien

"/[a-hj-np-tv-z]/"

i, ñ, o, u
http://es.wikipedia.org/wiki/Ortogra...l_espa%C3%B1ol


?:
esto no lo acabo de entender con respecto a hombre y mujer



hay algún programa para evaluar expresiones para linux si puede ser para fedora15,
yo recuerdo que hace tiempo cuando iba a la escuela creamos ficheros a11 ab y después con linux buscábamos con expresiones regulares pero ahora ya no me acuerdo de las expresiones regulares


-códigos postales

otra manera seria guardar provincia, comarca, población y código postal en la base de datos
y con ajax limitar los resultados en función de la provincia, comarca, población

pero de momento lo hago así porque nunca he utilizado ajax

lo que si voy a guardar es provincia y comarca y la población y el código que lo entren ellos

/*http://www.codigospostales.com/nestcp.cgi?17 girona 17000-17869 237 [1][7][0-9][0-9][0-9]| */
/*http://www.codigospostales.com/nestcp.cgi?08 barcelona 08000-08970 287 [0][8][0-9][0-9][0-9] |*/
/*http://www.codigospostales.com/nestcp.cgi?43 tarragona 43000-43206 197 [4][3][0-9][0-9][0-9] |*/
/*http://www.codigospostales.com/25* lleida 25000-25796 284 [25-22-08][0-9][0-9][0-9] |*/


-tanto el mes como el día e pensado estas 3 formas pero no se si están bien
$validacion_dia_nacimiento_cliente = "/[1-31]/";
$validacion_mes_nacimiento_cliente = "/[1-12]/";
[1-9][10-12]
[1|2|3|4|5|6|7|8|9|10|11|12]
[1-9][0-2]

touch 1 2 3 4 5 6 7 8 9 10 11 12 esto probando con linux o me sale 1-9 o 10,11,12 el único que va bien es el del medio pero seguro que hay alguna forma mas eficiente

-creo que el año ya estaría bien
$validacion_año_nacimiento_cliente = "/[1920-1993]/"; [1][9][2-9][0-9]

esto va a funcionar hasta 2018 quiero que sea mayores de edad 2000,
tendría que haber alguna forma de coger la hora del servidor o con php y mysql y calcular
por año, mes,día que sea mayor de edad esto se vería solo afectado a los que nacieron en 1993,
que habría meses y días que no aparecerían hasta que fueran mayores de edad
ademas no tendria que modificar el for 1920-1993 cada año,dia solo varia cada 4 años en febrero y el mes siempre es el mismo

Última edición por albertrc; 29/08/2011 a las 02:43
  #11 (permalink)  
Antiguo 30/08/2011, 07:12
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
expressiones regulares el mes y dia no me sale alguien puede ayudarme porfavor

-tanto el mes como el día e pensado estas 3 formas pero no se si están bien
$validacion_dia_nacimiento_cliente = "/[1-31]/";
$validacion_mes_nacimiento_cliente = "/[1-12]/";
[1-9][10-12]
[1|2|3|4|5|6|7|8|9|10|11|12]
[1-9][0-2]

el mes y dia no me sale alguien puede ayudarme porfavor
  #12 (permalink)  
Antiguo 30/08/2011, 08:59
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: mes y dia y expressiones regulares

Te recomiendo que eches un buen vistazo a algún manual de construcción de expresiones regulares, porque tienes lagunas enormes. Te analizo tu primera expresión, para que veas los errores que comentes:
[1-9][10-12]

Esta expresión te está diciendo que la cadena a mirar tiene que tener primero una cifra entre 1 y 9 y, seguida a esta, un 1 obligatoriamente, luego un 0 o un 1 y, por último, también obligatorio un 2. Luego, este número pasaría la criba: 2102, 9112, 6102...

La segunda funcionaría bien en principio, pero es que poner un OR de todas las posibilidades va a funcionar siempre, lo que tienes que intentar es reducir la expresión regular. Por ejemplo, lo que tú tienes se resumiría con esto "^[1-9]|1[0-2]$".

En fin, te vuelvo a enviar a algún manual, porque lo quieres hacer todo directo y no va así, tienes operadores, tienes que cumplir unas reglas, no se puede generalizar tanto en cuanto a expresiones regulares.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #13 (permalink)  
Antiguo 05/09/2011, 04:55
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: mes y dia y expressiones regulares

el mes y dia no hay maneras que me salga y mirando manuales no encontrado la forma de hacerlo

Etiquetas: dia, html, mysql, registro, regulares, formulario, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:37.