Foros del Web » Programando para Internet » Javascript »

Validar nombre de fichero introducido por un campo file

Estas en el tema de Validar nombre de fichero introducido por un campo file en el foro de Javascript en Foros del Web. Hola buenas, resulta que tengo un sistema común de subida de fichero mediante php y me gustaría validar por javascript el nombre de ese fichero ...
  #1 (permalink)  
Antiguo 28/01/2005, 06:01
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Validar nombre de fichero introducido por un campo file

Hola buenas, resulta que tengo un sistema común de subida de fichero mediante php y me gustaría validar por javascript el nombre de ese fichero que se vá a enviar, antes de que se envíe. Quiero por ejemplo que el fichero no contenga más de un punto (el del la extensión) y tampoco comillas ni simples ni dobles. O sea que al hacer Submit, se compruebe esto y muestre un error si ocurriese, no dejando enviar el archivo. Si no ocurre, se deja hacer el Submit normalmente para que se suba el fichero.

El formulario que tengo principalmente es:

Código:
<form method="POST" action="uploader.php?action=upload" enctype="multipart/form-data">
        <input type="hidden" name="MAX_FILE_SIZE" value="">
        <input type="file" size="30" name="userfile[]"></p>
        <input class="checktype" type="checkbox" name="field_copy" value="Yes">
        <input type="submit" name="field_submit" value="Subir fichero(s)"></td>
</form>
Venga a ver si me podéis echar un cable.

Gracias y saludoss.

Última edición por apañero; 28/01/2005 a las 06:03
  #2 (permalink)  
Antiguo 28/01/2005, 06:19
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola apañero

A ver si te sirve esto:
Código:
<form ... onsubmit="return validar(this)">
Código:
function validar(frm) {
  archivo=frm.elements[1].value;
  patron=/(\"|\')/
  if(archivo.split('.').length!=2 || patron.test(archivo)) {
    alert('fichero incorrecto')
    return false; }
}
Saludos,
  #3 (permalink)  
Antiguo 28/01/2005, 08:31
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Perfecto JavierB, lo malo es que me dá errror con cualquier nombre de archivo. Te recuerdo también que el nombre de archivo será del tipo: C:\path\nombre.ext
y que lo suyo sería validar sólo el nombre.ext

Y ahora te pediría una simple ampliación de las restricciones. Por ejemplo:

Código:
Si (hay más de un punto ) {
   alert('Sólo debe haber un punto en el archivo, el de la extensión únicamente, ninguno en el nombre!!')
   return false; 
}elseSi (hay alguna comilla simple o doble ){
    alert('No puede haber comillas simples o dobles en el nombre!!')
    return false;
   }elseSi (No hay sólo 3 guiones ){
     alert('Tiene que haber sólo 3 guiones en el nombre!!')
     return false;
        }elseSi (No hay como mínimo 1  paréntesis abierto ){
          alert('Tiene que haber mínimo 1 paréntesis abierto en el nombre!!')
          return false;
             }elseSi (No hay como mínimo 1 paréntesis cerrado ){
               alert('Tiene que haber mínimo 1 paréntesis cerrado en el nombre!!')
               return false;
               }else{
                  return true;
               }
En negrita lo chungo XD

Venga muchas gracias

Última edición por apañero; 28/01/2005 a las 09:12
  #4 (permalink)  
Antiguo 03/02/2005, 09:44
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
a ver si me podéis ayudar porfa, sólo revisad el script que puso JavierB que me dá error con cualquier nombre de archivo...
  #5 (permalink)  
Antiguo 08/02/2005, 14:28
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
...........
  #6 (permalink)  
Antiguo 08/02/2005, 19:10
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola apañero

No tengo muy claro el formato del nombre del archivo, te envio este script, no se si he acertado.

<html>
<head>
<title>Untitled</title>
<script language=JavaScript type=text/javascript>
<!--
function check_file(current_form){
// si esta vacio permitimos enviar el formulario
if(current_form.value.search(/\S/g) == -1){return true}
var msg = ""
// extraemos el nombre del archivo y la extension
var file1 = current_form.value.match(/[^\/\\]+\.(?:jpg|gif)$/i)

// la extension de archivo son validas
if(file1 != null){
// Extraemos solo el nombre del archivo
file1 = file1.toString().replace(/\.jpg$|\.gif$/i,"")

if((/["']|\-{4,}|\.{1,}|\s/i).test(file1)){
msg+="No se permiten comillas simples o doble, puntos, espacios"+
"\no más de tres guiones en el nombre del archivo.\t\n"
}
if(!(/^\(.+\)$/i).test(file1)){
msg+= "El nombre del archivo debe estar entre parentesis.\t\n"
}

}
else{
msg+="Solo son validos los archivos con la extension jpg o gif.\t\n"
}
//Si el mensaje no esta vacio
if(msg!=""){
msg+="Ejemplo de una archivo valido:\n\n"+
"\(nng-asdf).gif"
alert(msg)
return false
}

else{
// esta todo bien
return true
}

}
function send_form(current_form){
for(var ctr = 0; ctr < current_form.length; ctr++){

if(current_form[ctr].name == "file1"){
if(!check_file(current_form[ctr])){
// no enviamos el formulario
return false

}

}

}

}
//-->
</script>
</head>
<body>
<form name="form1">
<input type="file" size="50" name="file1" onchange="check_file(this)"/>
<input type="button" value="enviar" onclick ="send_form(this.form)">

</form>
</body>
</html>



Un saludo
  #7 (permalink)  
Antiguo 09/02/2005, 08:22
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
muchas gracias kepawe!!, parece funcionar pero no es exactamente restrictivo con lo que quiero. Habría que modificar un poco para que:

- El archivo permitido solo sea .mp3
- Tiene que haber 3 guiones
- Puede haber espacios
- Tiene que haber un paréntesis abierto y uno cerrado
- No puede haber ni comillas simples, ni dobles, ni puntos (salvo el de la extensión)
- No se puede enviar el campo vacío, hay que introducir un nombre

Creo que para tí no será problema el retocarlo.
Y una vez retocado, estaría bien que cuando te sale el mensaje de alerta, se borrase el nombre malo en vez de sólo alertar, para que se tenga que volver a seleccionar el archivo.

venga muchas gracias!!
  #8 (permalink)  
Antiguo 10/02/2005, 12:53
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola de nuevo Apañero, disculpa por la tardanza.

Aun no tengo muy claro algunas cosas.
Los 3 guiones pueden ir seguidos o deben ir separado.
Los parentesis deben encerrar el nombre del archivo o no por ejemplo:
(metallica---).mp3 o one-(-metallica-).mp3

En cuanto a lo de borrar el valor, la unica solucion que conozco es almacenar en un array los valores del resto de formulario, y despues resetear el formulario para despues volver a introducir los valores, por motivos de seguridad no se permite cambiar el valor de un input file. Me seria util que me pusieras que elementos forman el formulario para ahorrar comprobaciones.

Un saludo
  #9 (permalink)  
Antiguo 10/02/2005, 14:06
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Bueno no te preocupes, te cuento.
Los 3 guiones deben de ir separados por lo que sea, pero tiene que haber 3 guiones y que no estén seguidos, por ejemplo: Grupo-Disco-(10)-Cancion.mp3

Sólo un punto, el de la extensión, y ninguna comilla.

Los paréntesis como bien ves en el ejemplo de arriba, deben de encerrar un número (que es el número de canción) que por lo tanto debe ser de uno o máximo 2 dígitos y debe de haber sólo un paréntesis abierto y uno cerrado en todo el nombre de canción.

Lo de resetear el formulario parace buena idea además mi formulario es muy simmple:

<form method="POST" action="uploader.php?action=upload" enctype="multipart/form-data">
<input type="text" size="30" name="field_email" value="[email protected]"></p>
<input type="hidden" name="MAX_FILE_SIZE" value="">
<input type="file" size="30" name="file1" onchange="check_file(this)"/></p>
<input class="checktype" type="checkbox" name="field_copy" value="Yes">
<input type="submit" name="field_submit" value="Subir fichero(s)" onclick ="send_form(this.form)">
</form>

venga gracias por todo :P
  #10 (permalink)  
Antiguo 10/02/2005, 16:52
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola de nuevo

Te envio el código

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
<script language=JavaScript type=text/javascript>
<!--
function reset_file(current_form){
var temp_array = new Array()
for(var ctr = 0 ; ctr < current_form.length; ctr++){
if(current_form[ctr].type == "text") temp_array[ctr] = current_form[ctr].value
else if(current_form[ctr].type == "checkbox") temp_array[ctr] = current_form[ctr].checked
else temp_array[ctr] = "empty"
}
current_form.reset()
for(var ctr = 0 ; ctr < current_form.length; ctr++){
if(current_form[ctr].type == "text") current_form[ctr].value = temp_array[ctr]
else if(current_form[ctr].type == "checkbox")current_form[ctr].checked = temp_array[ctr]
}

}


function check_file(current_form){
// si esta vacio permitimos enviar el formulario
var msg = ""
//alert(current_form.file1.value)
if(current_form.file1.value.search(/\S/g) == -1){
alert("Mensaje si el campo esta vacio");
return false
}
// extraemos el nombre del archivo y la extension
var file2 = current_form.file1.value.match(/[^\/\\]+\.mp3$/i)
// la extension de archivo son validas
if(file2 != null){
// Extraemos solo el nombre del archivo
file2 = file2.toString().replace(/\.mp3/i,"")
if((/["']|\.{1,}/i).test(file2)){
msg+="No se permiten comillas simples o doble, puntos,"+
"\ en el nombre del archivo.\t\n"
}
if(!(/^.+-.+-\(\d{1,2}\)-.+$/i).test(file2)){
msg+= "El nombre del formato debe tener el siguiente formato.\t\n" +
"Grupo-Disco-(10)-Cancion.mp3"
}
}
else msg+="Solo son validos los archivos con la extension mp3.\t\n"

//Si el mensaje no esta vacio
if(msg!=""){
alert(msg)
reset_file(current_form)
return false
}
// esta todo bien
else return true


}
function send_form(current_form){
for(var ctr = 0; ctr < current_form.length; ctr++){
if(current_form[ctr].name == "file1"){
if(!check_file(current_form)) return false
}

}
// enviamos el formulario
current_form.submit()
}
//-->
</script>
</head>
<body>
<form method="POST" action="uploader.php?action=upload" enctype="multipart/form-data">
<input type="text" size="30" name="field_email" value="[email protected]"></p>
<input type="hidden" name="MAX_FILE_SIZE" value="">
<input type="file" size="30" name="file1" onchange="check_file(this.form)"/></p>
<input class="checktype" type="checkbox" name="field_copy" value="Yes">
<input type ="button" name="field_submit" value="Subir fichero(s)" onclick ="send_form(this.form)">
</form>

</body>
</html>

Saludos
  #11 (permalink)  
Antiguo 10/02/2005, 17:56
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
perfecto, parece funcionar todo menos la comprobación principal:

if(!(/^.+-.+-\(\d{1,2}\)-.+$/i).test(file2)){
msg+= "El nombre del formato debe tener el siguiente formato.\t\n" +
"Grupo-Disco-(10)-Cancion.mp3"
}

porque dá ese error para archivos que están en el formato correcto, por ejemplo:
vanilla_sky-Waiting_for_something-(02)-your_words.mp3
Not for Sale-Tomorrows Headache-(01)-Pinkas Song.mp3

Los demás errores los coge bien :P
  #12 (permalink)  
Antiguo 15/02/2005, 06:52
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola de nuevo.
Vaya , he tenido un lapsus :*) y no he tenido encuenta ".mp3" en la comprobación final del nombre del archivo.
Te envio el código, creo que ahora va bien.

function check_file(current_form){
// si esta vacio permitimos enviar el formulario
var msg = ""
//alert(current_form.file1.value)
if(current_form.file1.value.search(/\S/g) == -1){
alert("Mensaje si el campo esta vacio");
return false
}
// extraemos el nombre del archivo y la extension
var file2 = current_form.file1.value.match(/[^\/\\]+\.mp3$/i)
// la extension de archivo son validas
if(file2 == null) msg+="Solo son validos los archivos con la extension mp3.\t\n"
if(file2 != null){
// Extraemos solo el nombre del archivo
file2 = file2.toString()
var pts = (/\.mp3\.mp3$/i).test(file2) ? false : true
file2 = !pts ? file2.replace(/\.mp3\.mp3$/i,""):file2.replace(/\.mp3$/i,"")

if((/["']|\.{1,}/i).test(file2)){
msg+="No se permiten comillas simples o doble,"+
" ni puntos salvo el de la extensión.\t\n"
}
if(!(/^.+-.+-\(\d{1,2}\)-.+/i).test(file2)||pts){
msg+= "El nombre del archivo debe tener el siguiente formato:\t\n" +
"Grupo-Disco-(10)-Cancion.mp3"
}
}


//Si el mensaje no esta vacio
if(msg!=""){
alert(msg)
reset_file(current_form)
return false
}
// esta todo bien
else return true


}

Saludos
  #13 (permalink)  
Antiguo 15/02/2005, 08:15
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
jeje gracias de nuevo, pero me sigue dando el mismo error. Falla en:

if(!(/^.+-.+-\(\d{1,2}\)-.+/i).test(file2)||pts){
msg+= "El nombre del archivo debe tener el siguiente formato:\t\n" +
"Grupo-Disco-(10)-Cancion.mp3"
}

por ejemplo falla: C:\mp3\Millencolin-No_Cigar-(1)-No_Cigar.mp3
con el error de arriba, pero debería de pasar...
  #14 (permalink)  
Antiguo 15/02/2005, 11:45
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
A mi no me da error %-) , no se te he entendido bien , el nombre del archivo debe ser Grupo-Disco-(10)-Cancion.mp3.mp3 más la extensión en cursiva o en el caso de que sea Grupo-Disco-(10)-Cancion.mp3 el segundo script que te envie tampoco me daba error.

Lo he probado en IE6 y Mozilla en XP, alguna vez he tendido problemas con las expresiones regulares en I.E5 en win98, puede que sea eso.
Mejor me envias el codigo completo para que pueda ver el error.
Saludos
  #15 (permalink)  
Antiguo 15/02/2005, 12:02
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
ok te pongo la pagina entera. La canción con la extensión tiene que ser Grupo-Disco-(XX)-Cancion.mp3 sólo un .mp3

Bueno ahi te lo dejo:
Código:
<html>
<head>

<script language=JavaScript type=text/javascript>
<!--
function reset_file(current_form){
var temp_array = new Array()
for(var ctr = 0 ; ctr < current_form.length; ctr++){
if(current_form[ctr].type == "text") temp_array[ctr] = current_form[ctr].value
else if(current_form[ctr].type == "checkbox") temp_array[ctr] = current_form[ctr].checked
else temp_array[ctr] = "empty"
}
current_form.reset()
for(var ctr = 0 ; ctr < current_form.length; ctr++){
if(current_form[ctr].type == "text") current_form[ctr].value = temp_array[ctr]
else if(current_form[ctr].type == "checkbox")current_form[ctr].checked = temp_array[ctr]
}

}


function check_file(current_form){
// si esta vacio permitimos enviar el formulario
var msg = ""
//alert(current_form.file1.value)
if(current_form.file1.value.search(/\S/g) == -1){
alert("Mensaje si el campo esta vacio");
return false
}
// extraemos el nombre del archivo y la extension
var file2 = current_form.file1.value.match(/[^\/\\]+\.mp3$/i)
// la extension de archivo son validas
if(file2 == null) msg+="Solo son validos los archivos con la extension mp3.\t\n"
if(file2 != null){
// Extraemos solo el nombre del archivo
file2 = file2.toString()
var pts = (/\.mp3\.mp3$/i).test(file2) ? false : true
file2 = !pts ? file2.replace(/\.mp3\.mp3$/i,""):file2.replace(/\.mp3$/i,"")

if((/["']|\./i).test(file2)){
msg+="No se permiten comillas simples o doble,"+
" ni puntos salvo el de la extensión.\t\n"
}
if(!(/^.+-.+-\(\d\)-.+/i).test(file2)||pts){
msg+= "El nombre del archivo debe tener el siguiente formato:\t\n" +
"Grupo-Disco-(10)-Cancion.mp3"
}
}


//Si el mensaje no esta vacio
if(msg!=""){
alert(msg)
reset_file(current_form)
return false
}
// esta todo bien
else return true


}


function send_form(current_form){
for(var ctr = 0; ctr < current_form.length; ctr++){
if(current_form[ctr].name == "file1"){
if(!check_file(current_form)) return false
}

}
// enviamos el formulario
current_form.submit()
}
//-->
</script>


</head>

<body>



<p align="center"></p>
<p align="center">[Tamaño Máximo de archivo: 2MB]</p><p align="center">[Archivos permitidos: &nbsp;.mp3
]</p>

<div align="center"><center>
<form method="POST" action="uploader.php?action=upload" enctype="multipart/form-data">
<table border="0" width="600">
    <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
    </tr>
    <tr>
        <td width="35%"><p align="right"><b>E-Mail: </b>
        </p>
        </td>
        <td width="65%"><p align="left"><input type="text" size="30" name="field_email" value="[email protected]"></p>
        </td>
    </tr>    
        
        <tr>
        <td width="35%"><p align="right"><b>Fichero a enviar: </b></p>
        </td>
        <td width="65%"><p align="left"><input type="hidden" name="MAX_FILE_SIZE" value="">
        <input type="file" size="30" name="file1" onchange="check_file(this.form)"/></p>
        </td>
    </tr>


    

    <tr>
        <td width="35%">&nbsp;</td>
        <td width="65%">&nbsp;</td>
    </tr>
    <tr>
        <td align="center" colspan="2" width="100%"><input class="checktype" type="checkbox" name="field_copy" value="Yes">Deseo recibir confirmación del envío</td>
    </tr>
    <tr>
        <td width="35%">&nbsp;</td>
        <td width="65%">&nbsp;</td>
    </tr>
    <tr>
        <td align="center" colspan="2" width="100%"><input type="submit" name="field_submit" value="Subir fichero(s)" onclick ="send_form(this.form)"></td>
    </tr>
    <tr>
        <td width="35%">&nbsp;</td>
        <td width="65%">&nbsp;</td>
    </tr>
</table>
</form>
</center></div><p align="center"><font size="1" face="verdana"></font></p>


</body>
</html>
  #16 (permalink)  
Antiguo 15/02/2005, 12:48
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Sigo sin poder ver el error, seguro que alguien te puede ayudar a solucionarlo , a mí se me escapa.
Saludos y buena suerte.
  #17 (permalink)  
Antiguo 16/02/2005, 05:42
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
qué cosa más extraña no?

Dime algún archivo que con esa página de ahí arriba, te deje pasar sin aviso.
A mí por ejemplo, si en el campo file está: C:\Not for Sale-Tomorrows Headache-(01)-Pinkas Song.mp3 pues no me deja ni con Internet Explorer ni Firefox ni Opera. O esta por ejemplo C:\vanilla_sky-Waiting_for_something-(01)-distance.mp3

Podrías añadir un mensaje de alerta en el que se diga qué archivo está analizando el script?? Por ver si llega bien el nombre al script, para depurar vamos. Que alerte lo que hay contenido en file2 en ese momento de alerta.

Última edición por apañero; 16/02/2005 a las 06:01
  #18 (permalink)  
Antiguo 09/03/2005, 09:48
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Una ayudita porfaaa. Que he probado en varios ordenadores/navegadores y me da error cuando no debería
  #19 (permalink)  
Antiguo 09/03/2005, 13:57
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola de nuevo.
Vaya, como suelen decir las prisas no son buenas consejeras, y no recuerdo como mire el código, pero ahora veo dos errores, veo que en el formato has cambiado la expresión que comprueba el formato, tambien veo que has cambiado el boton input button por submit.
Tambien me he dado cuenta que olvide comprobar el numero de guiones admitidos, he modificado el script, he puesto comentarios para que te sea más facil depurarlo.
<html>
<head>

<script language=JavaScript type=text/javascript>
<!--
function reset_file(current_form){
var temp_array = new Array()
for(var ctr = 0 ; ctr < current_form.length; ctr++){
if(current_form[ctr].type == "text") temp_array[ctr] = current_form[ctr].value
else if(current_form[ctr].type == "checkbox") temp_array[ctr] = current_form[ctr].checked
else temp_array[ctr] = "empty"
}
current_form.reset()
for(var ctr = 0 ; ctr < current_form.length; ctr++){
if(current_form[ctr].type == "text") current_form[ctr].value = temp_array[ctr]
else if(current_form[ctr].type == "checkbox")current_form[ctr].checked = temp_array[ctr]
}

}


function check_file(current_form){
// si esta vacio permitimos enviar el formulario
var msg = ""
if(current_form.file1.value.search(/\S/g) == -1){
alert("Mensaje si el campo esta vacio");
return false
}
// extraemos el nombre del archivo y la extension
var file2 = current_form.file1.value.match(/[^\\]+\.mp3$/i)

// la extension de archivo es valida
if(file2 != null){
// Extraemos el nombre del archivo
file2 = file2.toString().replace(/\.mp3/i,"")
// comprueba que tenga solo tres guiones

if((file2.split("-")).length == 1 ? 0: (file2.split("-")).length == 4 ? 0 : 1){
msg+=" - Solo se permiten 3 guiones.\n"
}
/*comprueba si existe un caracter no valido, en este caso son válidos los caracteres
alfanumericos _- !¡ & y espacios, si por ejemplo quieres añadir otro caracter como
valido solo debes añadirlo dentro de la varible msk_char entre los simbolos [], si
por ejemplo añades el signo + como valido te daría error porque es un simbolo utilizado
en las expresiones regulares, para que no de error solo debes enmascararlo con una barra de escape \+ */
var msk_char = /[^a-záéíóúñ_\-\s\d&\(\)\!\¡]/ig
if(msk_char.test(file2)){
var no_char = file2.match(msk_char)
var msg_char =""
for(var ctr = 0,lg = no_char == null? 0: no_char.length;ctr < lg ;ctr++) msg_char +=(msg_char.indexOf(no_char[ctr])!= -1 ? "":" "+ no_char[ctr])
msg+=(no_char == null ? "" : (msg_char.length > 3 ? " - Se han encontrado los siguientes caracteres no válidos: " : " - Se ha encontrado el siguiente caracter no valido: ")+ msg_char +"\t \n")
}
// controla el formato de la cadena
// para permitir solo dos numeros \d\d o \d{2}
// para permitir solo un numero \d o \d{1}
// para permitir entre uno y dos \d{1,2}
if(!(/^.+-.+-\(\d{1,2}\)-.+$/i).test(file2)){
msg+= " - El formato debe ser el siguiente: Grupo-Disco-(10)-Cancion\t\n"
}
}

else msg+="\nSolo son validos los archivos con la extensión mp3.\t\n"

//Si el mensaje no esta vacio
if(msg!=""){
file2 == null ? alert(msg) :alert("\nNO ES VÁLIDO EL NOMBRE \n\n" + file2+ " \n\n" + msg + "\nPor favor, renombre el archivo.\n")
reset_file(current_form)
return false
}
// esta todo bien
else return true


}


//-->
</script>


</head>

<body>



<p align="center"></p>
<p align="center">[Tamaño Máximo de archivo: 2MB]</p><p align="center">[Archivos permitidos: &nbsp;.mp3
]</p>

<div align="center"><center>
<form method="POST" action="uploader.php?action=upload" enctype="multipart/form-data" onsubmit="return check_file(this)">
<table border="0" width="600">
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td width="35%"><p align="right"><b>E-Mail: </b>
</p>
</td>
<td width="65%"><p align="left"><input type="text" size="30" name="field_email" value="[email protected]"></p>
</td>
</tr>

<tr>
<td width="35%"><p align="right"><b>Fichero a enviar: </b></p>
</td>
<td width="65%"><p align="left"><input type="hidden" name="MAX_FILE_SIZE" value="">
<input type="file" size="30" onkeypress="return false;" name="file1" onchange="check_file(this.form)"/></p>
</td>
</tr>




<tr>
<td width="35%">&nbsp;</td>
<td width="65%">&nbsp;</td>
</tr>
<tr>
<td align="center" colspan="2" width="100%"><input class="checktype" type="checkbox" name="field_copy" value="Yes">Deseo recibir confirmación del envío</td>
</tr>
<tr>
<td width="35%">&nbsp;</td>
<td width="65%">&nbsp;</td>
</tr>
<tr>
<td align="center" colspan="2" width="100%"><input type="submit" name="field_submit" value="Subir fichero(s)" ></td>
</tr>
<tr>
<td width="35%">&nbsp;</td>
<td width="65%">&nbsp;</td>
</tr>
</table>
</form>
</center></div><p align="center"><font size="1" face="verdana"></font></p>


</body>
</html>

Espero haber dado en el clavo. :P
Saludos. :)
  #20 (permalink)  
Antiguo 09/03/2005, 19:03
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Nada macho, te pongo aquí el código, me da el error de siempre, el de el formato debe de ser Grupo-Disco-(10)-Cancion.

Código:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="robots" content="no index,no follow">
<link rel="stylesheet" type="text/css" href="templates/themes/breeze.css">
<script language=JavaScript type=text/javascript>
<!--
function reset_file(current_form){
var temp_array = new Array()
for(var ctr = 0 ; ctr < current_form.length; ctr++){
if(current_form[ctr].type == "text") temp_array[ctr] = current_form[ctr].value
else if(current_form[ctr].type == "checkbox") temp_array[ctr] = current_form[ctr].checked
else temp_array[ctr] = "empty"
}
current_form.reset()
for(var ctr = 0 ; ctr < current_form.length; ctr++){
if(current_form[ctr].type == "text") current_form[ctr].value = temp_array[ctr]
else if(current_form[ctr].type == "checkbox")current_form[ctr].checked = temp_array[ctr]
}

}


function check_file(current_form){
// si esta vacio permitimos enviar el formulario
var msg = ""
if(current_form.file1.value.search(/\S/g) == -1){
alert("Mensaje si el campo esta vacio");
return false
}
// extraemos el nombre del archivo y la extension
var file2 = current_form.file1.value.match(/[^\\]+\.mp3$/i)

// la extension de archivo es valida
if(file2 != null){
// Extraemos el nombre del archivo
file2 = file2.toString().replace(/\.mp3/i,"")
// comprueba que tenga solo tres guiones

if((file2.split("-")).length == 1 ? 0: (file2.split("-")).length == 4 ? 0 : 1){
msg+=" - Solo se permiten 3 guiones.\n"
}
/*comprueba si existe un caracter no valido, en este caso son válidos los caracteres
alfanumericos _- !¡ & y espacios, si por ejemplo quieres añadir otro caracter como
valido solo debes añadirlo dentro de la varible msk_char entre los simbolos [], si
por ejemplo añades el signo + como valido te daría error porque es un simbolo utilizado
en las expresiones regulares, para que no de error solo debes enmascararlo con una barra de escape \+ */
var msk_char = /[^a-záéíóúñ_\-\s\d&\(\)\!\¡]/ig
if(msk_char.test(file2)){
var no_char = file2.match(msk_char)
var msg_char =""
for(var ctr = 0,lg = no_char == null? 0: no_char.length;ctr < lg ;ctr++) msg_char +=(msg_char.indexOf(no_char[ctr])!= -1 ? "":" "+ no_char[ctr])
msg+=(no_char == null ? "" : (msg_char.length > 3 ? " - Se han encontrado los siguientes caracteres no válidos: " : " - Se ha encontrado el siguiente caracter no valido: ")+ msg_char +"\t \n")
}
// controla el formato de la cadena
// para permitir solo dos numeros \d\d o \d
// para permitir solo un numero \d o \d
// para permitir entre uno y dos \d
if(!(/^.+-.+-\(\d\)-.+$/i).test(file2)){
msg+= " - El formato debe ser el siguiente: Grupo-Disco-(10)-Cancion\t\n"
}
}

else msg+="\nSolo son validos los archivos con la extensión mp3.\t\n"

//Si el mensaje no esta vacio
if(msg!=""){
file2 == null ? alert(msg) :alert("\nNO ES VÁLIDO EL NOMBRE \n\n" + file2+ " \n\n" + msg + "\nPor favor, renombre el archivo.\n")
reset_file(current_form)
return false
}
// esta todo bien
else return true


}


//-->
</script>


</head>

<body>



<p align="center"><b>Sistema de Envío de tus canciones.</b></p>
<p align="center">[Tamaño Máximo de archivo: 2MB]</p><p align="center">[Archivos permitidos: &nbsp;.mp3
]</p>
<p align="center">admin tienes 1 archivos enviados. Puedes enviar 3 archivos</p>

<div align="center"><center>
<form method="POST" action="uploader.php?action=upload" enctype="multipart/form-data" onsubmit="return check_file(this)">
<table border="0" width="600">
    <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
    </tr>
    <tr>
        <td width="35%"><p align="right"><b>E-Mail: </b>
        </p>
        </td>
        <td width="65%"><p align="left">
              <input type="text" size="30" name="field_email" value="[email protected]">
            </p>
        </td>
    </tr>    
        
        <tr>
        <td width="35%"><p align="right"><b>Fichero a enviar: </b></p>
        </td>
        <td width="65%"><p align="left"><input type="hidden" name="MAX_FILE_SIZE" value="">
        <input type="file" size="30" name="file1" onchange="check_file(this.form)"/></p>
        </td>
    </tr>


    

    <tr>
        <td width="35%">&nbsp;</td>
        <td width="65%">&nbsp;</td>
    </tr>
    <tr>
        <td align="center" colspan="2" width="100%"><input class="checktype" type="checkbox" name="field_copy" value="Yes">Deseo recibir confirmación del envío</td>
    </tr>
    <tr>
        <td width="35%">&nbsp;</td>
        <td width="65%">&nbsp;</td>
    </tr>
    <tr>
        <td align="center" colspan="2" width="100%"><input type="submit" name="field_submit" value="Subir fichero(s)"></td>
    </tr>
    <tr>
        <td width="35%">&nbsp;</td>
        <td width="65%">&nbsp;</td>
    </tr>
</table>
</form>
</center></div><p align="center"><font size="1" face="verdana">
</font></p>


</body>
</html>
El caso es que si tengo un mp3 y lo renombro a Grupo-Disco-(10)-Cancion.mp3 y pruebo a seleccionarlo en el campo file, me da el error:

NO ES VALIDO EL NOMBRE
Grupo-Disco-(10)-Cancion
- El Formato debe ser el siguiente: Grupo-Disco-(10)-Cancion
Por Favor, renombre el archivo.

Los demás errores los dá bien (más de 3 paréntesis, caracteres no permitidos, extensión...)

Última edición por apañero; 09/03/2005 a las 19:05
  #21 (permalink)  
Antiguo 10/03/2005, 08:09
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Es normal que no de por valido Grupo-Disco-(10)-Cancion, ya que en la expresion regular if(!(/^.+-.+-\(\d\)-.+$/i).test(file2)) solo te acepta 1 numero, por ejemplo si aceptaria Grupo-Disco-(1)-Cancion, no entiendo por que cambias el codigo, tal como te lo envie valdria para Grupo-Disco-(10)-Cancion o Grupo-Disco-(1)-Cancion es decir if(!(/^.+-.+-\(\d{1,2}\)-.+$/i).test(file2))

Un saludo :)
  #22 (permalink)  
Antiguo 10/03/2005, 09:54
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Joder pues juraría que yo no cambié eso!! Bueno el caso es que Funciona!!! Muchas Gracias por todo kepawe y perdón por tanta plasta :P

saludosss
  #23 (permalink)  
Antiguo 11/03/2005, 07:57
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
De nada apañero, me alegro de haberte sirvido de ayuda.
Saludos :)
  #24 (permalink)  
Antiguo 19/05/2006, 04:18
 
Fecha de Ingreso: febrero-2006
Mensajes: 1
Antigüedad: 18 años, 2 meses
Puntos: 0
Hola gente del foro, estoy necesitando saber si se puede validar un campo file de un formulario con javascript para que permita verificar si el archivo que se va a cargar existe. Muchas gracias.
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 09:42.