11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à vous !

J'utilise une fonction en javascript qui ne passe pas avec l'interpréteur d'IE6 qui me dit ceci :
']' attendu dans l'expression régulière

Voici la fonction :

function no_accent(chaine) {
	temp = chaine.replace(/[àâäÀÂÄ]/gi, 'a');
	temp = temp.replace(/[éèêëÉÈÊË]/gi, 'e');
	temp = temp.replace(/[îïÎÏ]/gi, 'i');
	temp = temp.replace(/[ôöÔÖ]/gi, 'o');
	temp = temp.replace(/[ùûüÙÛÜ]/gi, 'u');

	return temp;
}


J'ai bien entendu essayé différentes écritures mais sans succès : c'était toujours pire que mieux Smiley cligne

Si vous avez une idée sur comment résoudre ceci, je suis preneur bien sûr !

PS : ce que je cherche à faire est supprimer TOUS les accents d'une chaîne.
Modifié par Alphonse (29 Nov 2007 - 09:54)
Ca ne fonctionne toujours pas avec ceci :


function no_accent(chaine) {
	var reg1 = new RegExp("[àâäÀÂÄ]", "gi");
	var reg2 = new RegExp("[éèêëÉÈÊË]", "gi");
	var reg3 = new RegExp("[îïÎÏ]", "gi");
	var reg4 = new RegExp("[ôöÔÖ]", "gi");
	var reg5 = new RegExp("[ùûüÙÛÜ]", "gi");

	temp = chaine.replace(reg1, 'a');
	temp = temp.replace(reg2, 'e');
	temp = temp.replace(reg3, 'i');
	temp = temp.replace(reg4, 'o');
	temp = temp.replace(reg5, 'u');

	return temp;
}


J'ai toujours le même message d'erreur sur la même ligne.
Modifié par Alphonse (27 Nov 2007 - 09:43)
Salut,

Je soupçonne un problème d'encodage, étant donné que j'ai réussi à faire fonctionner ce code sur IE6. As-tu un exemple du problème en ligne ?
En effet, ça fonctionne avec le deuxième code.

Je testais sur la mauvaise version du site : je modifiais le code 'version développement' et je testais le site 'version locale' au lieu de tester le site 'version développement'.

Désolé et merci pour cette idée d'utiliser la notation RegExp()
Je te conseille d'utiliser la première notation, qui est plus claire, plus performante, et permet de repérer plus vite des erreurs dans la syntaxe des expressions régulières.
Ah... alors le problème subsite toujours... j'essaye de vous mettre une version en ligne dans ce cas.
Modifié par Alphonse (27 Nov 2007 - 11:30)
Juste pour dire que je garde l'écriture avec le new RegExp() car jusqu'à présent, c'est la seule écriture qui passe sans erreur sur tous les navigateurs...

Pour Julien Royer> c'est surement une question d'habitude mais je trouve que l'écriture avec RegExp() est, pour moi, plus facilement maintenable que l'autre.

Merci encore !
Alphonse a écrit :
Juste pour dire que je garde l'écriture avec le new RegExp() car jusqu'à présent, c'est la seule écriture qui passe sans erreur sur tous les navigateurs...

J'ai bien peur qu'il ne s'agisse que d'un effet de bord... Apparemment, tu ne déclares pas d'encodage pour ton fichier JS, ce qui explique que tu rencontres des problèmes avec des caractères accentués. De façon générale, il est préférable de se contenter des caractères ASCII dans un fichier JS, et d'utiliser les séquences d'échappement (\uXXXX) pour les autres caractères.
Alphonse a écrit :
Pour Julien Royer> c'est surement une question d'habitude mais je trouve que l'écriture avec RegExp() est, pour moi, plus facilement maintenable que l'autre.

Habitude, je veux bien, par contre je ne vois pas ce que vient faire "maintenable" là-dedans. Smiley smile

@+ !
a écrit :
Apparemment, tu ne déclares pas d'encodage pour ton fichier JS

Si, excuse moi de ne pas avoir répondu à cette question. Mon fichier est encodé en ANSI : je parle bien du fichier (présent dans l'arborescence du serveur Web) et pas du document (qui contient les lignes de JS) !

a écrit :
Habitude, je veux bien, par contre je ne vois pas ce que vient faire "maintenable" là-dedans

Je trouve que ça faisait bien dans la phrase, je me suis sans doute un peu laissé aller en l'écrivant Smiley langue
Alphonse a écrit :
Si, excuse moi de ne pas avoir répondu à cette question. Mon fichier est encodé en ANSI : je parle bien du fichier (présent dans l'arborescence du serveur Web) et pas du document (qui contient les lignes de JS) !

Oui, mais cet encodage n'est pas spécifié dans les en-têtes HTTP.
Alphonse a écrit :
Je trouve que ça faisait bien dans la phrase, je me suis sans doute un peu laissé aller en l'écrivant Smiley langue

Mouarf. Smiley lol
a écrit :
Oui, mais cet encodage n'est pas spécifié dans les en-têtes HTTP.

Dans ce cas, le problème peut effectivement venir de là... et malheureusement, j'ignore ce que je dois faire... Smiley rolleyes
Alphonse a écrit :
Oui, mais cet encodage n'est pas spécifié dans les en-têtes HTTP.

Dans ce cas, le problème peut effectivement venir de là... et malheureusement, j'ignore ce que je dois faire... Smiley rolleyes
Il faut paramétrer le serveur pour qu'il les envoie (par exemple, avec Apache, dans un fichier .htaccess).

Néanmoins, comme je te le disais, le plus simple reste à mon avis de te limiter aux caractères ASCII dans un fichier JS, étant donné que ce dernier est un simple fichier texte qui ne contient pas d'information sur son encodage. Il te suffit pour cela de remplacer les caractères non ASCII par leur échappement Unicode \uXXXX, où XXXX est la valeur hexadécimale correspondant au caractère.

Dans ton cas, ça donne :
temp = chaine.replace(/[\u00e0\u00e2\u00e4\u00c0\u00c2\u00c4]/g, 'a');
temp = temp.replace(/[\u00e9\u00e8\u00ea\u00eb\u00c9\u00c8\u00ca\u00cb]/g, 'e');
temp = temp.replace(/[\u00ee\u00ef\u00ce\u00cf]/g, 'i');
temp = temp.replace(/[\u00f4\u00f6\u00d4\u00d6]/g, 'o');
temp = temp.replace(/[\u00f9\u00fb\u00fc\u00d9\u00db\u00dc]/g, 'u');

Bon après, c'est un peu moins lisible, je te l'accorde. Smiley ohwell
Mais plus robuste...

<edit>Tu peux aussi utiliser \xXX au lieu de \u00XX.
Modifié par Julien Royer (28 Nov 2007 - 17:15)
Je te remercie pour l'intérêt que tu portes à mon sujet. J'essayerai ta proposition demain dans la matinée et je te tiendrai au courant.

A+ Smiley smile
Ca fonctionne impeccablement bien ! Je te remercie Smiley cligne

Cependant, je vais garder tout de même l'écriture du new RegExp mais... je garde ton code commenté ! Smiley biggrin

Merci et à bientôt !