• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Revolt

Opera e Regex

1 mensagem neste tópico

Boas.

Numa forma de validação de upload pretendo dar feedback ao user relativamente à extensão do ficheiro seleccionado utilizando o seguinte código:

var file = document.getElementById('file');
image = document.getElementById('fileFeedback');
if (file.value.length == 0) {
setError("Por favor seleccione um ficheiro");
} else {
var allowedExtensions = new Array("pdf", "doc", "ppt", "xls", "txt", "png", "jpg", "jpeg", "bmp", "gif", "docx", "pptx", "xlsx", "html", "htm", "zip", "rar");
var regexp = /\w:\\(?[^.]+))+\.([^"]+)/;
var match = regexp.exec(file.value);
if (match == null) {
setError("Caminho de ficheiro inválido");
return;
} else {
for (i = 0; i < allowedExtensions.length; i++) {
	if (match[2] == allowedExtensions[i]) {
		setCorrect("Ficheiro Válido");
		return;
	}
}
}

No IE7 e Firefox funciona tudo bem e caso a extensão esteja correcta ele dá o feedback. Já no Opera (9.24) a expressão var match = regexp.exec(file.value); resulta sempre em match == null e portanto apresenta sempre a extensão como sendo inválida. Pensei que tivesse a haver com o facto do opera adicionar aspas no inicio e no fim do path mas mesmo com as aspas funciona no IE e FF. Alguém tem alguma ideia do que possa ser?

EDIT: Resolvido!

O problema residia no facto do value do file input no IE e no FF devolverem o caminho completo do ficheiro (estando portanto de acordo com a regular expression) e no opera este só devolvia o nome+extensão do ficheiro.

Para resolver o problema bastou mudar a expressão regular para:

/(?:\w:\\)?(?[^.]+))+\.([^"]+)/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora