2014-02-26 179 views
11

我在HTML得到了下面的結構:爲什麼JavaScript字符串空白字符 不匹配?

<div id="text"> 


     some&nbsp;text 


    </div> 

如果我修剪的文本,並對其進行測試:

$("#text").text().trim() === "some text" 

返回false 也

$("#text").text().trim() === "some&nbsp;text" 

返回false 但

/^some\s{1}text$/.test($("#text").text().trim()) 

返回true。 請告訴我,這裏有什麼問題。

正如你所說,我正在使用jQuery(1.6)。

+0

'/^some\s{1}text$/.test("some  文本「.trim())'返回'false'給我。 http://jsfiddle.net/JamesD/m9TXr/ –

+0

如下面的答案中所述,您需要通過jQuery解析它。 – alpham8

+0

因爲那不是「Javascript字符串空白字符」。 –

回答

20

這是因爲沒有打破空間(則charCode 160)並不完全等於空間(則charCode 32)

jQuery的.text()編碼HTML實體的直接的Unicode等價,所以&nbsp;成爲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" 
+0

不是我想要使用固定數字而不是關鍵常量,但它可以並且完成它的工作。 – alpham8

+0

您可以使用'$('#text')。text()。trim()。replace($''' ').text(),「」)顯然你會緩存'$('').text()'部分 - 這將支持任何不同的瀏覽器和jQuery現在和未來決定使用' '。這就是說,使用RegExp的第二個例子要好得多,特別是它支持多個替換。 – Pebbl

+0

這個正則表達式並不全是包含的。我這樣做:'var htmlString = $ myField.text()。replace(/ \ s/g,「」);'努力刪除所有空格。相反,零寬度空格字符8203仍然存在,導致'htmlString.length'讀爲1.您可能還需要替換這個。 – vapcguy

3

它沒有考慮到隱藏的'\ n'。擺脫'\ n'並用'=='檢查。

嘗試這個

var x = $("#text").html(); 
      x = x.replace(/(\r\n|\n|\r)/gm, ""); 
      x = x.replace(/\s+/g, ''); 
      alert(x); 

      if (x == 'some&nbsp;text') { 
       alert('true'); 
      } 
      else { 
       alert('false'); 
      } 

希望這有助於。

+0

@ alpham8:也添加了一個代碼。你也可以縮短它。讓我知道它是否有幫助,或者如果您有任何疑問。 理想情況下,您可以在一個.remove()中刪除空格和\ n。 –

12

&nbsp;與空格字符(Unicode U + 0020)不一樣。這是一個不間斷的空格字符,用Unicode編碼爲U + 00A0。這就是爲什麼你的第一個測試不匹配,但第三個測試是這樣的; \s匹配所有空格字符。

要麼堅持自己的正則表達式測試,或在你的平等檢查,請使用\u00a0\xa0

$("#text").text().trim() === "some\xa0text"; 
$("#text").text().trim() === "some\u00a0text";