JavaScript正則trim刪除空格與字串

來源:互聯網
上載者:User

關於 trim 其實沒啥好說的,無非就是去除首位空格,對於現代瀏覽器來說只是簡單的正則 /^\s+|\s+$/ 就可以搞定了。
javascriptRegex 實現Trim()

 代碼如下 複製代碼

String.prototype.trim = function(){
    return this.replace(/(^\s*)|(\s*$)/, "");
}
 

TrimLeft()

 

String.Prototype.trimLeft=function(){
    return this.replace(/(^\s*)/,"");
}
 

trimRight()

 

String.prototype.trimRight()=funtion(){
   return this.replace(/(\s*$)/,"");
}

下面是trim刪除空格的例子

 代碼如下 複製代碼

<SCRIPT LANGUAGE="JavaScript">
<!--
String.prototype.Trim = function()
{
return this.replace(/(^s*)|(s*$)/g, "");
}
String.prototype.LTrim = function()
{
return this.replace(/(^s*)/g, "");
}
String.prototype.RTrim = function()
{
return this.replace(/(s*$)/g, "");
}
//-->
</SCRIPT>
<input type="text" value="    前後都是空格   " id="space">
<input type="button" value="去前後空格" onclick="javascript:document.getElementById('space').value=document.getElementById('space').value.Trim();document.getElementById('space').select();">
<input type="button" value="去前空格" onclick="javascript:document.getElementById('space').value=document.getElementById('space').value.LTrim();document.getElementById('space').select();">
<input type="button" value="去後空格" onclick="javascript:document.getElementById('space').value=document.getElementById('space').value.RTrim();document.getElementById('space').select();">
<input type="button" value="還原" onclick="javascript:document.getElementById('space').value='    前後都是空格     ';">

而且支援中文空格 &nbsp; 等等。
什麼 \s 支援 中文空格?
是的。

開啟 RegExp#character-classes 往下拉一點,找到 \s 這個解釋。

原文:
Matches a single white space character, including space, tab, form feed, line feed and other Unicode spaces. Equivalent to [ \f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000].

Google譯文:
匹配單個空白字元,包括空格,定位字元,換頁,換行等Unicode的空格。
相當於 [ \f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]

其中 \u00a0 是 &nbsp; \u3000 是 中文空格,其他是什麼,我也不知道,有興趣的可以自己去翻 unicode 表。

看到這,已經顛覆了我們傳統正則的規範了,以前,我們只知道 \s 等價於 [ \f\n\r\t\v],但卻不知道現在的js裡卻等價於所有空白字元。
話雖如此,但是低版本卻一直是 [ \f\n\r\t\v],甚至連 trim 都木有,所以我們要相容低版本的話,不能簡單的用 /^\s+|\s+$/ 處理了,要加上中文空格 和 &nbsp;
所以要 /^[\s\u3000\u00A0]+|[\s\u3000\u00A0]+$/ 才行,這樣常用的就有了,至於那些 \u2000 之類的,我也不知道是什麼,可以按需添加進去。
常用的無非就中文空格和實體空格了。

我們看下 jQuery 是怎麼處理這個的。

文本

 代碼如下 複製代碼

// 1.4.1
rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,

// 1.5.1, 1.6.1, 1.7.1
trimLeft = /^[\s\xA0]+/;
trimRight = /[\s\xA0]+$/;

// 1.8.1, 1.9.1, 1.10.1, 1.11.1
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,

好吧,1.4-1.7 都一樣,值去除普通空格和實體空格。
1.8-1.11 加了一個 \uFEFF ,這個是什麼東西呢?
jQuery 的注釋寫到 Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
譯為: 確保去除 BOM 和 &nbsp; (請看你的 Safari 5.0 and IE)
什麼 BOM ?為什麼會出現 BOM ?
這東西一般人是打不出來的,為什麼要去除這個呢?
PS:這裡的BOM是 位元組順序標記(byte-order mark),不清楚的,請翻閱這裡 位元組順序標記 。

我也不知道,最近翻不了牆,所以懶得找了。
但是他不去除中文空格這有點說不過去了,難道他們不會中文,就無視中文空格嗎?
所以我們應該最佳化下這個正則 /^[\s\u3000\uFEFF\xA0]+|[\s\u3000\uFEFF\xA0]+$/g 這樣才對嘛。

來看下原生 trim 和我們正則去除結果如何吧:

文本運行

 代碼如下 複製代碼

var rtrim = /^[\s\u3000\uFEFF\xA0]+|[\s\u3000\uFEFF\xA0]+$/g;
console.log( "普通空格測試:" );
console.log( "'" + " 普通空格 ".replace(rtrim, "") + "'" );
console.log( "'" + " 普通空格 ".trim() + "'" );

console.log( "實體空格測試:" );
console.log( "'" + " \u00a0 實體空格 \u00a0 ".replace(rtrim, "") + "'" );
console.log( "'" + " \u00a0 實體空格 \u00a0 ".trim() + "'" );

console.log( "中文空格測試:" );
console.log( "'" + "   中文空格   \u3000".replace(rtrim, "") + "'" );
console.log( "'" + "   中文空格   \u3000".trim() + "'" );

結果很明顯,都去除乾淨了,說明 trim 也是支援中文空格的。
好了今天就分享這麼個小知識點,明天見。

好到裡你對於trim()使用正則來刪除空格與中文空格瞭解多少了呢,在此我們注意了我們只要把\替換成英文小字的\才可以哦,因為本系統不支援\哦。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.