Problème && ||
Résolu
iamtheone
Messages postés
39
Date d'inscription
Statut
Membre
Dernière intervention
-
iamtheone Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
iamtheone Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
D'abord je tiens à préciser que je ne compte pas faire de typosquating, je fais ce code pour m'entraîner avec les string.
Voici mon conde Javascript :
Et mon HTML :
Mon problème c'est que lorsque j'écris aq ou un mot avec ces deux lettres dans le input, il ressort (après click sur start) comme il a été entré. Par exemple aq donnera aq et non qa ou encore macaque donnera macaque et non mqcqaue... Je ne comprend pas :/. Sachant que avec az ou qz tout se passe bien.
Merci de votre aide.
D'abord je tiens à préciser que je ne compte pas faire de typosquating, je fais ce code pour m'entraîner avec les string.
Voici mon conde Javascript :
result0 = []; result1 = []; ext = [".com", ".fr"] qw = { a: "q", q: "a", z: "w" } function start() { dn = document.form.dn.value; dnl = dn.length; ta = document.getElementById("ta"); if (dn=="") { alert("Please add a domain name.") } else { result0 = []; result1 = []; ta.innerHTML = ""; dble(); if (dn.indexOf("m") == -1 && (dn.indexOf("a")>=0 || dn.indexOf("q")>=0 || dn.indexOf("z")>=0)) { qwerty(); } end(); for (i=0; i<result0.length; i++) { ta.innerHTML += result0[i] + "<br />"; } } } function dble() { for (i=0; i<dnl; i++) { result1[i] = dn.slice(0, i+1) + dn.charAt(i) + dn.slice(i+1); } } function end() { for (i=0, j=0, k=0; i<result1.length-0.001; i+=1/ext.length, j++, k++) { if (j==ext.length) { var j = 0; } result0[k] = result1[Math.floor(i)] + ext[j]; } } function qwerty() { alert() var dnqw = dn; for (i=0; i<dnl; i++) { if (qw[dnqw[i]]) { var dnqw = dnqw.replace(dnqw[i], qw[dnqw[i]]); } } result1[dnl] = dnqw; }
Et mon HTML :
<!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <form name="form"> <input type="text" name="dn" placeholder="google"></input> <input type="button" value="Start" onClick="start()" </form> <div id="ta"></div> </body> </html>
Mon problème c'est que lorsque j'écris aq ou un mot avec ces deux lettres dans le input, il ressort (après click sur start) comme il a été entré. Par exemple aq donnera aq et non qa ou encore macaque donnera macaque et non mqcqaue... Je ne comprend pas :/. Sachant que avec az ou qz tout se passe bien.
Merci de votre aide.
2 réponses
Bonjour,
J'ai un peu la flemme de décortiquer ton code ...;
par contre.. toi tu peux déjà ajouter un peu de débogage ( à l'aide de console.log .. ) dans ton code histoire d'essayer de comprendre ce qui ne "marche" pas.
Par exemple, avant ton if
tu pourrais faire des console.log de chaque bloc et voir ce que ça t'affiche :
au passage ... évites si possible les variables globales (sauf si vraiment nécessaire... ce qui n'est pas le cas ici ) et préfères utiliser le passage de paramètres et les return dans tes fonctions.
J'ai un peu la flemme de décortiquer ton code ...;
par contre.. toi tu peux déjà ajouter un peu de débogage ( à l'aide de console.log .. ) dans ton code histoire d'essayer de comprendre ce qui ne "marche" pas.
Par exemple, avant ton if
if (dn.indexOf("m") == -1 && (dn.indexOf("a")>=0 || dn.indexOf("q")>=0 || dn.indexOf("z")>=0))
tu pourrais faire des console.log de chaque bloc et voir ce que ça t'affiche :
console.log('dn.indexOf(m) :' + dn.indexOf("m") ); console.log('dn.indexOf(a) :' + dn.indexOf("a") ); console.log('dn.indexOf(q) :' + dn.indexOf("q") ); console.log('dn.indexOf(z) :' + dn.indexOf("z") );
au passage ... évites si possible les variables globales (sauf si vraiment nécessaire... ce qui n'est pas le cas ici ) et préfères utiliser le passage de paramètres et les return dans tes fonctions.
Bonjour
Le mot "macaque" ,n'est pas un bon exemple puisque tu n'appliques pas qwerty aux mots qui contiennent m.
Si on oublie ce détail, ton problème vient de l'accumulation de deux autres :
- La fonction String.replace que tu utilises dans qwerty ne modifie que la première occurence du caractère recherché.
- Tu fais tes substitutions les unes après les autres. Si on considère le mot acaque :
. il devient d'abord qcaque
. puis on trouve le deuxième a, il devient qcqque
. puis on trouve le q suivant et on remplace, mais c'est le premier q qui est remplacé : on obtient acqque
À ta place, dans qwerty, je recopierais la chaîne caractère par caractère en faisant la substitution quand je rencontre l'un des caractères à transformer.
Le mot "macaque" ,n'est pas un bon exemple puisque tu n'appliques pas qwerty aux mots qui contiennent m.
Si on oublie ce détail, ton problème vient de l'accumulation de deux autres :
- La fonction String.replace que tu utilises dans qwerty ne modifie que la première occurence du caractère recherché.
- Tu fais tes substitutions les unes après les autres. Si on considère le mot acaque :
. il devient d'abord qcaque
. puis on trouve le deuxième a, il devient qcqque
. puis on trouve le q suivant et on remplace, mais c'est le premier q qui est remplacé : on obtient acqque
À ta place, dans qwerty, je recopierais la chaîne caractère par caractère en faisant la substitution quand je rencontre l'un des caractères à transformer.