Remplacement caractères spéciaux par équivalents ASCII (+regexp)

bateauivre54 Messages postés 3 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 4 mai 2006 - 3 mai 2006 à 00:59
bateauivre54 Messages postés 3 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 4 mai 2006 - 4 mai 2006 à 23:48
Bonjour,

je viens d'apprendre les bases des expressions rationnelles.
Je programme actuellement une variante du chiffrement de Vigenère.
Pour cela, j'ai besoin de formater une chaîne de caractères afin qu'elle ne contienne plus que des chiffres, majuscules, minuscules et @ # ; ? ! ( )

Je souhaiterais donc remplacer tous les caratères spéciaux par leurs équivalents ASCII.

é devient é à à etc.

J'ai tenté en vain :

texte = texte.replace(/[^0-9A-Za-z</>-@#;?!()]/gi,"&#" + texte.charCodeAt(texte.indexOf(this)) + ";") ;

mais ça ne marche pas...

Pourriez-vous m'aider...?

J'en profite si y'en a qui s'y connaisse en crypto de bien vouloir jeter un coup d'oeil à cette question :
forums.futura-sciences.com/showthread.php?p=594071

4 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
3 mai 2006 à 13:39
bonjour,




>>texte = texte.replace(/[^0-9A-Za-z</>-@#;?!()]/gi,"&#" + texte.charCodeAt(texte.indexOf(this)) + ";") ;

 </>, regexp est pommé : <\/> irait mieux. 
y a-til d'autres caractères à "échapper" ? : ( )  ...



>>texte.charCodeAt(texte.indexOf(this)


this ? c'est quoi ?
je pense que ça voudrait être le code ascii du caractère à remplacer ?
pas convaincu que cela puisse fonctionner dans une expression régulière
( mais peut-être me trompe-je ? )
faire l'équivalent "manuellement" ( avec une boucle ) ?



Cordialement      Bul.   
Site
0
bateauivre54 Messages postés 3 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 4 mai 2006
3 mai 2006 à 19:34
Merci de ta réponse.



1) "this ? c'est quoi ?"



Bah, "this" serait l' « objet » en question.



Pour donner un exemple, j'ai codé pour un livre d'or :







smiley est une fonction javascript. Le this.alt fait référence au "alt"
de celui-ci, de cet "objet". J'aurai pu mettre this.scr, ç'aurait
renvoyer le lien.



2) faire l'équivalent "manuellement" ( avec une boucle ) ?



Ce serait ultra-long, ça voudrait dire récupérer tous les codes ASCII
des caractères usuels et faire un tableau immense. D'autre part, ça
veut dire qu'il y aurait des caractères non-pris en compte. Si un jour,
j'ai envie d'écrire en idéogrammes (on peut toujours avoir des idées
bizarres), bah j'écrirai 数独 (pour Sudoku) et ça coderait
&#25968;&#29420; sans renvoyer d'erreur.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 mai 2006 à 08:20
>>serait l' « objet » en question.

ben oui ? mais lequel ?...
je me cite: je pense que ça voudrait être le code ascii du caractère à remplacer ?...

>>Ce serait ultra-long, ça voudrait dire récupérer tous les codes ASCII
ben non... je proposais d'essayer un replace sur chaque caractère !
car, je répète, m'étonnerait que dans une expression régulière
on puisse utiliser un "this dynamique".

cordialement Bul. Site
0
bateauivre54 Messages postés 3 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 4 mai 2006
4 mai 2006 à 23:48
Trouvé !!



var expr = new RegExp("[^0-9a-z</>-@#;?!()]","gi");



(caractère d'échappement de / pas nécessaire)



texte = texte.replace(expr, function($0, $1) { return ("&#"+texte.charCodeAt($1)+";"); } );



$1 désigne la position
0
Rejoignez-nous