11540 sujets

JavaScript, DOM et API Web HTML5

Salut à tous. Après avoir trainé sur différents tutos je ne comprend pas bien comment fonctionne les expressions régulières.

Je voudrais interdire une dizaines de caractères... mais dès que l'antislash arrive, cela ne marche plus ...

Je fais comme ca.


var tableau_interdit = new Array();
		tableau_interdit[0] = new RegExp("[?]","g");
		tableau_interdit[1] = new RegExp("[/]","g");
		tableau_interdit[2] = new RegExp("[\]","g");
		tableau_interdit[3] = new RegExp('["]',"g");
		tableau_interdit[4] = new RegExp("[:]","g");
		tableau_interdit[5] = new RegExp("[*]","g");
		tableau_interdit[6] = new RegExp("[<]","g");
		tableau_interdit[7] = new RegExp("[>]","g");
		tableau_interdit[8] = new RegExp("[|]","g");
		tableau_interdit[9] = new RegExp("[.]","g");
	
	for(var i=0;i<=parseInt(tableau_interdit.length)-1;i++){
		if (texte.match(tableau_interdit[i])) {
			alert("Le caractère "+tableau_interdit[i]+" est interdit dans un nom de fichier");
			return false;
		}
	}

vous avez compris que mon problème ce situait la :


tableau_interdit[2] = new RegExp("[\]","g");


J'ai essayé les : /\/ ou \\ je suis même passer par d'autres écritures très mystérieuses mais sans résultat.

Si vous avez une idée je suis la Smiley lol [/i][/i]
Modifié par ffwrude (23 Jan 2008 - 14:16)
L'antislash étant un metacaractère, il faut donc... l'"antislashé".
Sinon dans ton exemple, les [ ] ne sont pas obligatoires, entre crochet il est utile de mettre plusieurs caractères, et les [ ] vont alors "trouver" n'importe quel caractère qui est dans ces crochets... C'est un peu mal expliqué, mais en gros, dans ton exemple, tu auras très bien pu faire [?/\\":<>\*\.\|] (les meta-caractères \ . | et * sont antislashés)
Je viens de tester comme ca


tableau_interdit[2] = new RegExp("\\","g");


et comme ca


tableau_interdit[2] = new RegExp("[\\]","g");


sans résultat. Je crois que j'pige vraiement rien au principes... je me suis relu une doc en bouffant... Je comprend encore moins les examples que les explications lol
je propose l'arme absolu....... Smiley eek Smiley biggol Smiley fache

enfin peut-etre...

tableau_interdit[2] = new RegExp("[\\\\]","g");

avec 4 \ car
1) dans les regexp tu dois doublé le \
2) dans une chaine de caractere entre " tu dois doublé les \

sinon j'ai testé ça aussi tableau_interdit[2] = /\\/g;
c'est la forme raccourci du regexp.

j'ai eu des alert je crois donc que ça marche.
CPascal a écrit :

sinon j'ai testé ça aussi tableau_interdit[2] = /\\/g;


A voté !

Merci bien Smiley smile
Salut,

ça fait quand même un peu lourd comme traitement Smiley lol !

Pourquoi ne pas faire, comme le disait Tsukaniki :
valeur = document.getElementById('nom').value;
var maReg = new RegExp( '[?/\\":<>\*\.\|]', "gi" ) ;
var resultat = valeur.match(maReg);
for(var j=0; j<resultat.length; j++){
  alert(resultat[j]);
} 

A+
tu lui dit quels sont les caractéres authorisés ça va plus vite?

moi ce qui me choque dans toute ces solutions c'est la répétitions des alertes.

le gars qui choisi comme texte:

//////////////////////////youuuaajesuistropfort/////////////////////////

il va souffrir... ( bien fait d'ailleurs )

vaudrait mieux d'abord detecté si le truc est valide et puis affiché un seul alert pour marquer le coup.
Modifié par CPascal (23 Jan 2008 - 15:54)
Bah non... dès qu'il en trouve un il lui dit : tatapof ! kess tu fou ! pas de slash. il le fera qu'une seule fois l'alert.
ffwrude a écrit :
ca marche mais comment je dis quel est le mauvais caractère entré ?
Ben tu pourrais juste mettre :
var resultat = valeur.match(maReg);
if (resultat)  alert('caract\350re '+resultat[0]+' incorrect !');
Ah ouais... ca pette comme ca...

Mais je suis étonné. J'étais persuadé que JS ne gèrait pas les chaines de caractères comme des tableaux...

J'en étais vraiement sur...

Merci beaucoup en tout cas Smiley smile

méthode adoptée :


var maReg = new RegExp( '[?/\\":<>\*\.\|]', "gi" ) ;
	var resultat = MACHAINE.match(maReg);
	for(var j=0; j<resultat.length; j++){
		if (resultat)  alert('caract\350re '+resultat[0]+' incorrect !');
		return false;
	} 
Heyoan a écrit :

Sauf que du coup tu n'as pas à défiler toutes les valeurs du tableau avec le for (...) !


exact Smiley smile