[英]Why does the JavaScript String whitespace character not match?
我在 HTML 中得到了以下结构:
<div id="text">
some text
</div>
如果我修剪文本并使用以下方法对其进行测试:
$("#text").text().trim() === "some text"
它返回false
,还有:
$("#text").text().trim() === "some text"
返回false
,但是:
/^some\s{1}text$/.test($("#text").text().trim())
返回true
。 所以请告诉我,这里出了什么问题。
正如您所建议的,我使用的是 jQuery (1.6)。
这是因为no空格(charCode 160)不完全等于空格(charCode 32)
jQuery的.text()
将HTML实体编码为直接与Unicode等价,因此
变成String.fromCharCode(160)
您可以通过将所有不间断空格替换为普通空格来解决此问题:
d.text().replace(String.fromCharCode(160) /* no breaking space*/,
" " /* ordinary space */) == "some text"
或更好:
d.text().replace(/\s/g /* all kinds of spaces*/,
" " /* ordinary space */) == "some text"
与空格字符(Unicode U + 0020)不同。 这是一个不间断的空格字符,以Unicode编码为U + 00A0。 这就是为什么您的第一个测试不匹配,而第三个测试匹配的原因。 \\s
匹配所有空格字符。
坚持使用正则表达式测试,或在相等性检查中使用\
或\\xa0
:
$("#text").text().trim() === "some\xa0text";
$("#text").text().trim() === "some\u00a0text";
它没有考虑不可见的“ \\ n”。 摆脱“ \\ n”并使用“ ==”进行检查。
尝试这个
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');
}
希望这可以帮助。
有几个类似的问题。 您可以检查出来。
将jquery .text()匹配为&nbsp; 不间断的空间
如前几篇文章所述。 您可以将“ ==”而不是“ ===”进行比较
并使用'\\ xa0'进行比较
这是不间断空格的实际特征。
function containSpecial( str )
{
var containSpecial = RegExp(/[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\;)(\:)(\`)(\')(\")(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/);
var containSpecial2 = RegExp(/[((\︿)(\’)(\‵)(\!)(\@)(\#)(\%)(\&)(\*)(\+)(\\)(\")(\<)(\>)(\|)(\_)(\[)(\])(\,)(\.)(\¥)(\…)(\()(\))(\—)(\|)(\{)(\})(\【)(\】)(\‘)(\;)(\:)(\”)(\“)(\。)(\、)(\?)]+/);
var ans = false;
if (containSpecial.test(str)){
ans = true;
}
if (containSpecial2.test(str)){
ans = true;
}
return ( ans ); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.