J'ai obtenu en html la construction suivante:
<div id="text">
some text
</div>
Si je coupe le texte et le teste avec:
$("#text").text().trim() === "some text"
il retourne faux aussi
$("#text").text().trim() === "some text"
renvoie faux mais
/^some\s{1}text$/.test($("#text").text().trim())
renvoie vrai. Alors, dites-moi ce qui ne va pas ici.
Comme vous le suggérez, j'utilise jQuery (1.6).
C'est parce que l'espace sans rupture (charCode 160) n'est pas exactement égal à l'espace (charCode 32)
.text()
de jquery code les entités HTML en leur équivalence directe unicode, et donc
devient String.fromCharCode(160)
Vous pouvez le résoudre en remplaçant tous les espaces insécables par des espaces ordinaires:
d.text().replace(String.fromCharCode(160) /* no breaking space*/,
" " /* ordinary space */) == "some text"
ou mieux encore:
d.text().replace(/\s/g /* all kinds of spaces*/,
" " /* ordinary space */) == "some text"
n'est pas le même que le caractère espace (Unicode U + 0020). C'est un caractère d'espace insécable, codé en Unicode comme U + 00A0. C'est pourquoi le premier de vos tests ne correspond pas, mais le troisième le fait; \s
correspond à tous les caractères d'espace blanc.
Respectez votre test d'expression régulière ou utilisez \u00a0
ou \xa0
dans votre contrôle d'égalité:
$("#text").text().trim() === "some\xa0text";
$("#text").text().trim() === "some\u00a0text";
Il ne tient pas compte des "\ n" qui sont invisibles. Débarrassez-vous du '\ n' et vérifiez-le avec '=='.
Essaye ça
var x = $("#text").html();
x = x.replace(/(\r\n|\n|\r)/gm, "");
x = x.replace(/\s+/g, '');
alert(x);
if (x == 'some text') {
alert('true');
}
else {
alert('false');
}
J'espère que cela t'aides.
Il y a quelques questions similaires. Vous pouvez les consulter.
Correspondance de jquery .text () à nbsp;espace insécable
Comme mentionné dans les articles précédents. Vous pouvez comparer avec "==" au lieu de "===" et utiliser '\ xa0' pour comparer
qui est le caractère réel de l'espace insécable.