Foros del Web » Programando para Internet » PHP »

Cómo determinar la precencia de un numero al principio y final de una cadena?

Estas en el tema de Cómo determinar la precencia de un numero al principio y final de una cadena? en el foro de PHP en Foros del Web. Cordial saludo, hice esto: Código PHP: $var = '321.sdfgsdfg dsfg s.321' ; $x = '^[0-9]$' ; if( ereg ( "$x" , $var )){echo  'No valida' ;}else {echo  'vale' ;}  ...
  #1 (permalink)  
Antiguo 05/08/2004, 18:05
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Cómo determinar la precencia de un numero al principio y final de una cadena?

Cordial saludo, hice esto:

Código PHP:
$var='321.sdfgsdfg dsfg s.321';
$x='^[0-9]$';
if(
ereg("$x",$var)){echo 'No valida';}else {echo 'vale';} 
Y no funciona....

Que sucede?
  #2 (permalink)  
Antiguo 05/08/2004, 18:51
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
No soy un experto en expresiones regulares, pero prueba esto:
Código PHP:
 $var='321.sdfgsdfg dsfg s.321';
$x='(^[0-9]*)(.*)([0-9]*$)';
if(
ereg($x,$var)){
   echo 
'No valida';
}else{
   echo 
'vale';

Saludos
  #3 (permalink)  
Antiguo 05/08/2004, 19:31
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Gracias, no funciono.
  #4 (permalink)  
Antiguo 05/08/2004, 20:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
A lo "bruto" .. podría ser:

Código PHP:
if (is_numeric($cadena{0}) || is_numeric($cadena{count($cadena)}){
   echo 
"No valida";
} else {
   echo 
"Valida";

Pero por supuesto que usando expresiones regulares le dás cierto "caché" a tu código y versatilidad .. aquí el "algorítmo" del patrón que buscas es bastente simple .. pero si se complica un poco más ya hay que pensar bien en como se usan las expresiones regulares (que por cierto no define PHP .. )

Un saludo,

Última edición por Cluster; 05/08/2004 a las 20:25
  #5 (permalink)  
Antiguo 06/08/2004, 13:34
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
Iniciado por Anarko
Gracias, no funciono.
¿Puedes dar un poco más de detalle de qué significa "no funcionó"?
Prueba así:(disulpa que ahora no tengo php y no puedo hacer pruebas)
Código PHP:
 $var='321.sdfgsdfg dsfg s.321';
$x='^([0-9]*)(.*)([0-9]*)$';
if(
ereg($x,$var)){
   echo 
'Tiene números al principio y al final';
}else{
   echo 
'No tiene números al principio y al final';

Saludos
  #6 (permalink)  
Antiguo 06/08/2004, 13:42
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Finalmente creo que este podría ser el patrón:
Código PHP:
$x '^[0-9]+[a-zA-Z]+[0-9 ]+$' 
Explicando un poco:
Código PHP:
'^'             //El primer caracter que buscamos debe estar al inicio de la cadena
'[0-9]'        //Y debe ser numérico
'+'             //de los que puede haber uno o más
'[a-zA-Z]'   //Seguido por una letra mayúscula o minúscula
'+'             //de las que puede haber una o más
'[0-9 ]'       //Seguido por un caracter numérico
'+'             //de los que puede haber uno o más
'$'             //Y deben estar al final de la cadena 
Supongo que funcionará, pero si no... por ahí va la cosa. Ah... las explicaciones y el ejemplo lo saqué tomando como base los ejemplos de:
http://www.ignside.net/man/php/regex.php

Saludos

Última edición por jpinedo; 06/08/2004 a las 13:58
  #7 (permalink)  
Antiguo 06/08/2004, 14:04
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Bueno... ahora viendo bien... supongo que no funcionará porque hay otros caracteres como puntos(.) que no estoy considerando en el patrón.
Sería bueno que nos digas si la estructura que tienes es tal cual la pones ahí.. o si es sólo un ejemplo. De todos modos si solamente quieres saber si empieza por números y termina con números, supongo que debería funcionar el patrón que te había puesto al comienzo, sólo cambiando el * por un +

Ya que el asterisco dice "cero o más" y el signo + dice "uno o más".

Finalmente, podría quedar así:
Código PHP:
 $var='321.sdfgsdfg dsfg s.321';
$x='^[0-9]+(.*)[0-9]+$';
if(
ereg($x,$var)){
   echo 
'Tiene números al principio y al final';
}else{
   echo 
'No tiene números al principio y al final';

Lo único que cambié respecto al patrón que te expliqué en el post anterior es que (.*) significa cualquier caracter que esté cero o más veces. Ya no nos limitamos a letras, sino que ahora también se consideran por ejemplo espacios en blanco y puntos.

Saludos

Última edición por jpinedo; 06/08/2004 a las 14:06
  #8 (permalink)  
Antiguo 06/08/2004, 14:32
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Bueno.. ya lo pude probar y sí funciona el último que te puse.
Saludos
  #9 (permalink)  
Antiguo 06/08/2004, 17:16
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Gracias, esta perfecto!.

Puedes recomendar un URL/manual ?

Salu2!.
  #10 (permalink)  
Antiguo 06/08/2004, 17:30
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Sobre expresiones regulares hay una pequeña guía (pero bastane clara y con ejemplos) en el enlace que te puse en un post anterior. Por si acaso lo repito acá:
http://www.ignside.net/man/php/regex.php

Saludos
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 11:46.