Foros del Web » Programando para Internet » PHP »

validar puntos entre caracteres

Estas en el tema de validar puntos entre caracteres en el foro de PHP en Foros del Web. Hola, quería saber si existe alguna funcion o manera de comprobar que una cadena guardada en una variable, por ejemplo, $CADENA que me compruebe si ...
  #1 (permalink)  
Antiguo 30/03/2010, 01:44
Avatar de luicos  
Fecha de Ingreso: febrero-2010
Ubicación: Galicia
Mensajes: 106
Antigüedad: 14 años, 2 meses
Puntos: 0
validar puntos entre caracteres

Hola, quería saber si existe alguna funcion o manera de comprobar que una cadena guardada en una variable, por ejemplo, $CADENA que me compruebe si existe algun punto (.) entre sus caracteres.

Gracias
  #2 (permalink)  
Antiguo 30/03/2010, 01:55
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: validar puntos entre caracteres

Intenta usar la funcion strrpos(): [URL="http://www.php.net/manual/en/function.strrpos.php"]Funcion Strrpos()[/URL]
  #3 (permalink)  
Antiguo 30/03/2010, 02:27
Avatar de luicos  
Fecha de Ingreso: febrero-2010
Ubicación: Galicia
Mensajes: 106
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: validar puntos entre caracteres

La cadena que quiero comprobar es la que recibo de un input type file, es decir, NOMBRE.DOC
Quiero comprobar que NOMBRE sin el DOC no tenga puntos
¿como hago eso?
porque si utilizo end(explode) para sacar el nombre de la extension y tiene un punto aparte del de la extension, no me vale

Encontré esto en internet, pero no acabo de entender como funciona:

Código PHP:
$file2 pathinfo($file);
Array
(
    [
dirname] => .
    [
basename] => nombre.apellido.jpg
    
[extension] => jpg
    
[filename] => nombre.apellido

  #4 (permalink)  
Antiguo 30/03/2010, 02:53
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: validar puntos entre caracteres

Todos los archivos son ".DOC"?
Si es asi puedes hacer un substr() y sacar el .doc
Código PHP:
$n strlen($file) - 4;
echo 
substr($file,0,$n); //te imprimira el nombre del fichero sin el .doc 
  #5 (permalink)  
Antiguo 30/03/2010, 03:15
Avatar de luicos  
Fecha de Ingreso: febrero-2010
Ubicación: Galicia
Mensajes: 106
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: validar puntos entre caracteres

Son DOC y XLS

O sea, que le saco los cuatro ultimos caracteres y luego para comprobar que no tenga puntos en medio utilizo :
Código PHP:
if(strrpos('$cadenasinextension','.')==true)
    {
         echo 
"Tiene puntos en medio";

     } 
Seria así o no ????
  #6 (permalink)  
Antiguo 30/03/2010, 03:30
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: validar puntos entre caracteres

La funcion te devuelve un int, y si no se puede devuelve false, asi que mejor utiliza is_numeric().

Código PHP:
if(is_numeric(strpos('$cadenasinextension','.'))==true
    { 
         echo 
"NO tiene puntos en medio"

     } 
Esta es mi solución, estoy seguro de que hay soluciones mucho mejores, pera hasta que alguien las diga...

Última edición por Vallu; 30/03/2010 a las 03:35
  #7 (permalink)  
Antiguo 30/03/2010, 03:34
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Respuesta: validar puntos entre caracteres

Cita:
Iniciado por luicos Ver Mensaje
Son DOC y XLS

O sea, que le saco los cuatro ultimos caracteres y luego para comprobar que no tenga puntos en medio utilizo :
Código PHP:
if(strrpos('$cadenasinextension','.')==true)
    {
         echo 
"Tiene puntos en medio";

     } 
Seria así o no ????
No, no sería así. En realidad tu función funcionaría para casi todos los casos excepto que el punto esté al comienzo de la cadena. Revisa la documentación de strrpos() y verás porqué.

Si quieres usar esa función hazlo así

Código PHP:
if(strrpos($cadena'.')===false)
{
    echo 
"Sin puntos";
}
else echo 
'Con puntos'
Saludos.
__________________
R4DS en español | R4DS en inglés
  #8 (permalink)  
Antiguo 30/03/2010, 03:46
Avatar de luicos  
Fecha de Ingreso: febrero-2010
Ubicación: Galicia
Mensajes: 106
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: validar puntos entre caracteres

Pues no me funciona, no se porqué!!
  #9 (permalink)  
Antiguo 30/03/2010, 03:52
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Respuesta: validar puntos entre caracteres

Muestra qué es lo que tienes hasta ahora. Las funciones sueltas que han ido surgiendo a lo largo del post son correctas por lo que habría que revisar cómo las has puesto a funcionar.

Saludos.
__________________
R4DS en español | R4DS en inglés
  #10 (permalink)  
Antiguo 30/03/2010, 04:10
Avatar de luicos  
Fecha de Ingreso: febrero-2010
Ubicación: Galicia
Mensajes: 106
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: validar puntos entre caracteres

Tengo esto:

En $_FILES [ 'formato' ][ 'name' ]; se coje la cadena, por ejemplo: ARCHIVO.DICIEMBRE.DOC
Donde ARCHIVO.DICIEMBRE es la cadena que tengo que validar a ver si tiene o no puntos en medio, que en este caso si que tiene.

Código PHP:
$filaformato $_FILES 'formato' ][ 'name' ];
$filaformato2 strlen($filaformato) - 4;
$filaformato3 substr($filaformato,0,$filaformato2);
if(
strrpos($filaformato3,".")===true)
                {
                    echo 
"ERROR:TIENE PUNTOS EN MEDIO";
                }
            else
                {
                                         echo 
"NO TIENE PUNTOS";
                                 } 
  #11 (permalink)  
Antiguo 30/03/2010, 04:22
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Respuesta: validar puntos entre caracteres

Ojo con los valores de retorno de strrpos().

Si vas a optar por trabajar quitando los últimos caracteres y luego buscando con strrpos el condicional podría ser así:

Código PHP:
if(strrpos($filaformato3".")===false)
{
    echo 
"Sin puntos";
}
else
{
    echo 
"Con puntos";

Ten en cuenta que por la forma en que estás trabajando no tienes garantía alguna sobre lo que pase en los últimos 4 caracteres (al menos con la porción de código que nos has mostrado).
Si necesitas una validación del nombre más robusta quizá deberías considerar el uso de alguna expresión regular.

Saludos.
__________________
R4DS en español | R4DS en inglés
  #12 (permalink)  
Antiguo 30/03/2010, 04:37
Avatar de luicos  
Fecha de Ingreso: febrero-2010
Ubicación: Galicia
Mensajes: 106
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: validar puntos entre caracteres

La validacion la hago con javascript en el formulario, es decir, que cuando alguien intenta introducir un archivo con extension diferente de .DOC o .XLS le saco un mensaje de ERROR que dice que solo puede adjuntar archivos de esas extensiones.

¿Te referías a eso?
Si es así creo que el strrpos() me podría valer no??
  #13 (permalink)  
Antiguo 30/03/2010, 04:45
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Respuesta: validar puntos entre caracteres

Todo lo que valides en JavaScript debes validarlo también en PHP. Un usuario podría no tener JS habilitado en su navegador o podría deshabilitarlo maliciosamente para evadir la validación.

Saludos.
__________________
R4DS en español | R4DS en inglés
  #14 (permalink)  
Antiguo 30/03/2010, 04:52
Avatar de luicos  
Fecha de Ingreso: febrero-2010
Ubicación: Galicia
Mensajes: 106
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: validar puntos entre caracteres

Dios, que putada, no me digas eso que si tengo que volver a validar en PHP todo lo que he validado en JAVASCRIPT me da la risa.
Me imagino que en la mayoria de casos nadie tendrá deshabilitado el JAVASCRIPT. Además, esta aplicacion se va a utilizar en una intranet, y yo controlo los PC's así que no creo que haya ningún listillo que me deshabilite el JAVASCRIPT, jejejeeee..
  #15 (permalink)  
Antiguo 30/03/2010, 04:59
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Respuesta: validar puntos entre caracteres

la validación de formularios es una de las cosas más pesadas de hacer sin alguna clase o grupo de funciones que te faciliten el trabajo!

Si confias en tus usuarios puedes dejar solo el JS (aunque probablemente yo no lo haría). Pero ten en cuenta que las posibilidades que te he planteado existen y son errores comunes por lo que las "malas personas" ya saben dónde buscar para "hacer maldades". Hay que recordar que la validación más importante es la del servidor. La de JavaScript es accesoria: ahorra tiempo al usuario, quita carga al servidor y se ve bonita, pero no te ofrece seguridad real en tu aplicación .

Por otra parte también sería posible evadir la validación JS sin deshabilitarlo enviando directamente una petición POST al script que procesa tu formulario!!

Saludos.
__________________
R4DS en español | R4DS en inglés
  #16 (permalink)  
Antiguo 30/03/2010, 05:06
Avatar de luicos  
Fecha de Ingreso: febrero-2010
Ubicación: Galicia
Mensajes: 106
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: validar puntos entre caracteres

Gracias, lo tendré en cuenta.
Ahh.. por cierto, el codigo ya me funciona, lo voy a poner aqui repetido por si alguien le vale:

Código PHP:
$filaformato $_FILES 'formato' ][ 'name' ];
$filaformato2 strlen($filaformato) - 4;
$filaformato3 substr($filaformato,0,$filaformato2);
if(
strrpos($filaformato3,".")===false// SI EL NOMBRE NO TIENE PUNTOS EN MEDIO
     
{
           echo 
"NO TIENE PUNTOS";
      }
else
     {
            echo 
"TIENE PUNTOS";
     } 
Saludos y hasta otra
  #17 (permalink)  
Antiguo 30/03/2010, 08:14
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: validar puntos entre caracteres

Código PHP:
Ver original
  1. <?php
  2. // lo `principal seria si el nombre no tiene mas de 1 punto..
  3. // esa es la forma de ver el problema mas simple
  4. if(substr_count($_FILES [ 'formato' ][ 'name' ], '.') > 1){
  5.     echo "TIENE PUNTOS";
  6. }else{
  7.     echo "NO TIENE PUNTOS";
  8. }
  9. ?>
__________________
More about me...
~ @rhyudek1
~ Github
  #18 (permalink)  
Antiguo 30/03/2010, 08:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: validar puntos entre caracteres

De hecho es un poco más rápido lo que habías puesto antes:
Código PHP:
Ver original
  1. $file = pathinfo($_FILES['formato']['name']);
  2. if (strrpos($file['filename'],".")===false) {
  3.        echo "no tiene puntos";
  4. } else {
  5.        echo "tiene puntos";
  6. }

Saludos.

Etiquetas: caracteres, puntos
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 12:00.