js去除空格12種方法

来源:https://www.cnblogs.com/jiangdd/archive/2019/12/10/12017523.html

註:本文非本人原著;原文作者: 黃卉 《js去除空格12種方法》 ...


註:本文非本人原著;原文作者: 黃卉  《js去除空格12種方法

//JS去除空格的方法目前共有12種:
//實現1
 String.prototype.trim = function() {
   return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
 }
//看起來不怎麼樣, 動用了兩次正則替換,實際速度非常驚人,主要得益於瀏覽器的內部優化。一個著名的例子字元串拼接,直接相加比用Array做成的StringBuffer 還快。base2類庫使用這種實現。
// 實現2
 String.prototype.trim = function() {
   return this.replace(/^\s+/, '').replace(/\s+$/, '');
 }
//和實現1 很相似,但稍慢一點,主要原因是它最先是假設至少存在一個空白符。Prototype.js使用這種實現,過其名字為strip,因為 Prototype的方法都是力求與Ruby同名。
 實現3
 String.prototype.trim = function() {
   return  this.substring(Math.max(this.search(/\S/), 0),this.search(/\S\s*$/) + 1);
 }
//以截取方式取得空白部分(當然允許中間存在空白符),總共 調用了四個原生方法。設計得非常巧妙,substring以兩個數字作為參數。Math.max以兩個數字作參數,search則返回一個數字。速度比上 面兩個慢一點,但比下麵大多數都快。
// 實現4
 String.prototype.trim = function() {
   return  this.replace(/^\s+|\s+$/g, '');
 }
//這個可以稱得上實現2的簡化版,就是 利用候選操作符連接兩個正則。但這樣做就失去了瀏覽器優化的機會,比不上實現3。由於看來很優雅,許多類庫都使用它,如JQuery與mootools
//實現5
 String.prototype.trim = function() {
   var str = this;
   str = str.match(/\S+(?:\s+\S+)*/);
   return str ? str[0] : '';
 }
// match 是返回一個數組,因此原字元串符合要求的部分就成為它的元素。為了防止字元串中間的空白符被排除,我們需要動用到非捕獲性分組(?:exp)。由於數組可 能為空,我們在後面還要做進一步的判定。好像瀏覽器在處理分組上比較無力,一個字慢。所以不要迷信正則,雖然它基本上是萬能的。
// 實現6
 String.prototype.trim = function() {
   return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, '$1');
 }
//把符合要求的部分提供出來,放到一個空字元串中。不過效率很差,尤其是在IE6中。
// 實現7
 String.prototype.trim = function() {
   return this.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, '$1');
 }
//和實現6很相似,但用了非捕獲分組進行了優點,性能效之有一點點提升。

//實現8
 String.prototype.trim = function() {
   return this.replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1');
 }
//沿著上面兩個的思路進行改進,動用了非捕獲分組與字元集合,用?頂替了*,效果非常驚人。尤其在IE6中,可 以用瘋狂來形容這次性能的提升,直接秒殺火狐。
// 實現9
 String.prototype.trim = function() {
   return this.replace(/^\s*([\S\s]*?)\s*$/, '$1');
 }
//這次是用懶惰匹配 頂替非捕獲分組,在火狐中得到改善,IE沒有上次那麼瘋狂。
 實現10
 String.prototype.trim = function() {
   var str = this,
   whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
   for (var i = 0,len = str.length; i < len; i++) {
     if (whitespace.indexOf(str.charAt(i)) === -1) {
       str = str.substring(i);
       break;
     }
   }
   for (i = str.length - 1; i >= 0; i--) {
     if (whitespace.indexOf(str.charAt(i)) === -1) {
       str = str.substring(0, i + 1);
       break;
     }
   }
  return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
 }
//我 只想說,搞出這個的人已經不是用牛來形容,已是神一樣的級別。它先是把可能的空白符全部列出來,在第一次遍歷中砍掉前面的空白,第二次砍掉後面的空白。全 過程只用了indexOf與substring這個專門為處理字元串而生的原生方法,沒有使用到正則。速度快得驚人,估計直逼上內部的二進位實現,並且在 IE與火狐(其他瀏覽器當然也毫無疑問)都有良好的表現。速度都是零毫秒級別的。
// 實現11
String.prototype.trim = function() {
   var str = this,
   str = str.replace(/^\s+/, '');
   for (var i = str.length - 1; i >= 0; i--) {
     if (/\S/.test(str.charAt(i))) {
       str = str.substring(0, i + 1);
       break;
     }
   }
   return str;
 }
//實現10已經告訴我們普通的原生字元串截取方法是遠勝於正則替換,雖然是複雜一點。但只要正則 不過於複雜,我們就可以利用瀏覽器對正則的優化,改善程式執行效率,如實現8在IE的表現。我想通常不會有人在項目中應用實現10,因為那個 whitespace 實現太長太難記了(當然如果你在打造一個類庫,它絕對是首先)。實現11可謂其改進版,前面部分的空白由正則替換負責砍掉,後面用原生方法處理,效果不遜 於原版,但速度都是非常逆天。
// 實現12
 String.prototype.trim = function() {
   var str = this,
   str = str.replace(/^\s\s*/, ''),
   ws = /\s/,
   i = str.length;
   while (ws.test(str.charAt(--i)));
   return str.slice(0, i + 1);
 }
//實現10與實現11在寫法上更好的改進版,註意說的不是性能速 度,而是易記與使用上。和它的兩個前輩都是零毫秒級別的,以後就用這個來工作與嚇人。

  

//1:去字元串前後空格:changeThing.replace(/(^\s*)|(\s*$)/g,'')
//2:
function  trm(e){
      return e.replace( /^\s+/, "" ).replace( /\s+$/, "" ); //js去掉全換空格
     }
//  調用:
 var  causeCheckNopass=trm(mini.get("m_zjhms").getValue());


==================================================================================================

//1、  去掉字元串前後所有空格:
//代碼如下:
         function Trim(str)
         {   16              return str.replace(/(^\s*)|(\s*$)/g, "");   17      }
//    說明:
//    如果使用jQuery直接使用$.trim(str)方法即可,str表示要去掉前後所有空格的字元串。
   21 //2、 去掉字元串中所有空格(包括中間空格,需要設置第2個參數為:g)
//代碼如下:
        function Trim(str,is_global)
        {
            var result;
            result = str.replace(/(^\s+)|(\s+$)/g,"");
            if(is_global.toLowerCase()=="g")
            {
                result = result.replace(/\s/g,"");
             }
            return result;
}

==================================================================================================

//js去掉字元串前後空格的五種方法2012-04-02 

[javascript]
//供使用者調用  
function trim(s){    41 return trimRight(trimLeft(s));    42 }    43 //去掉左邊的空白  
function trimLeft(s){    45 if(s == null) {    46 return "";    47 }    48 var whitespace = new String(" \t\n\r");    49 var str = new String(s);    50 if (whitespace.indexOf(str.charAt(0)) != -1) {    51 var j=0, i = str.length;    52 while (j < i && whitespace.indexOf(str.charAt(j)) != -1){    53 j++;    54 }    55 str = str.substring(j, i);    56 }    57 return str;    58 }    59 //去掉右邊的空白 www.2cto.com   
function trimRight(s){    61 if(s == null) return "";    62 var whitespace = new String(" \t\n\r");    63 var str = new String(s);    64 if (whitespace.indexOf(str.charAt(str.length-1)) != -1){    65 var i = str.length - 1;    66 while (i >= 0 && whitespace.indexOf(str.charAt(i)) != -1){    67 i--;    68 }    69 str = str.substring(0, i+1);    70 }    71 return str;    72 }   73 第二種:正則替換
[javascript]
<SCRIPT LANGUAGE="JavaScript">    76 <!--    77 String.prototype.Trim = function()    78 {    79 return this.replace(/(^\s*)|(\s*$)/g, "");    80 }    81 String.prototype.LTrim = function()    82 {    83 return this.replace(/(^\s*)/g, "");    84 }    85 String.prototype.RTrim = function()    86 {    87 return this.replace(/(\s*$)/g, "");    88 }    89 //-->  
</SCRIPT>   91 第三種:使用jquery
[javascript]
$.trim(str)   94 jquery內部實現為:
[javascript]
function trim(str){     97     return str.replace(/^(\s|\u00A0)+/,'').replace(/(\s|\u00A0)+$/,'');     98 }     99 第四種:使用motools
[javascript]
function trim(str){    102     return str.replace(/^(\s|\xA0)+|(\s|\xA0)+$/g, '');    103 }   104 第五種:裁剪字元串方式
[javascript]
function trim(str){    107     str = str.replace(/^(\s|\u00A0)+/,'');    108     for(var i=str.length-1; i>=0; i--){    109         if(/\S/.test(str.charAt(i))){    110             str = str.substring(0, i+1);    111             break;    112         }    113     }    114     return str;    115 }  116 }

==================================================================================================

判斷空:
 Object.prototype.toString。對於不同類型的數據,這個方法可以返回 '[object Object]'、'[object Array]'、'[object String]' 這樣的字元串,非常方便判斷。需要註意的是,在 IE8 及其以下瀏覽器中,這個方法對於null、undefined、window 等都會返回 '[object Object]',不過還好,這並不影響我們使用它判斷空對象

var isEmptyValue = function(value) {
            var type;
            if(value == null) { // 等同於 value === undefined || value === null
                return true;
            }
            type = Object.prototype.toString.call(value).slice(8, -1);
            switch(type) {
            case 'String':
                return !$.trim(value);
            case 'Array':
                return !value.length;
            case 'Object':
                return $.isEmptyObject(value); // 普通對象使用 for...in 判斷,有 key 即為 false
            default:
                return false; // 其他對象均視作非空
            }
        };

為何不用其他方法,因為下麵的寫法考慮了各種相容性。
判斷是否為數組
isArray = function (source) {
    return '[object Array]' == Object.prototype.toString.call(source);
};
判斷是否為日期對象
isDate = function(o) {
    // return o instanceof Date;
    return {}.toString.call(o) === "[object Date]" && o.toString() !== 'Invalid Date' && !isNaN(o);
};
判斷是否為Element對象
isElement = function (source) {
    return !!(source && source.nodeName && source.nodeType == 1);
};
判斷目標參數是否為function或Function實例
isFunction = function (source) {
    // chrome下,'function' == typeof /a/ 為true.
    return '[object Function]' == Object.prototype.toString.call(source);
};
判斷目標參數是否number類型或Number對象
isNumber = function (source) {
    return '[object Number]' == Object.prototype.toString.call(source) && isFinite(source);
};
 判斷目標參數是否為Object對象
isObject = function (source) {
    return 'function' == typeof source || !!(source && 'object' == typeof source);
};
判斷目標參數是否string類型或String對象
isString = function (source) {
    return '[object String]' == Object.prototype.toString.call(source);
};
判斷目標參數是否Boolean對象
isBoolean = function(o) {
    return typeof o === 'boolean';
};


1、  去掉字元串前後所有空格:
代碼如下:
         function Trim(str)
         {  182              return str.replace(/(^\s*)|(\s*$)/g, "");  183      }
    說明:
    如果使用jQuery直接使用$.trim(str)方法即可,str表示要去掉前後所有空格的字元串。
  187 2、 去掉字元串中所有空格(包括中間空格,需要設置第2個參數為:g)
代碼如下:
        function Trim(str,is_global)
        {
            var result;
            result = str.replace(/(^\s+)|(\s+$)/g,"");
            if(is_global.toLowerCase()=="g")
            {
                result = result.replace(/\s/g,"");
             }
            return result;
}

==================================================================================================
js去除輸入框中所有的空格和禁止輸入空格的方法
<span style="font-family: Arial, Helvetica, sans-serif;">
      <input type="password" name="password" id="password" onkeydown="return banInputSapce(event);" onKeyup="return inputSapceTrim(event,this);" />
</span>  205 
/**  207 * 是否去除所有空格  208 * @param str  209 * @param is_global 如果為g或者G去除所有的  210 * @returns  211 */  212 function Trim(str,is_global)  213 {  214 var result;  215 result = str.replace(/(^\s+)|(\s+$)/g,"");  216 if(is_global.toLowerCase()=="g")  217 {  218 result = result.replace(/\s/g,"");  219 }  220 return result;  221 }  222 
/**  224 * 空格輸入去除  225 * @param e  226 * @returns {Boolean}  227 */  228 function inputSapceTrim(e,this_temp)  229 {  230 this_temp.value = Trim(this_temp.value,"g");  231 var keynum;  232 if(window.event) // IE 
{  234 keynum = e.keyCode  235 }  236 else if(e.which) // Netscape/Firefox/Opera 
{  238 keynum = e.which  239 }  240 if(keynum == 32){  241 return false;  242 }  243 return true;  244 }  245 /**  246 * 禁止空格輸入  247 * @param e  248 * @returns {Boolean}  249 */  250 function banInputSapce(e)  251 {  252 var keynum;  253 if(window.event) // IE 
{  255 keynum = e.keyCode  256 }  257 else if(e.which) // Netscape/Firefox/Opera 
{  259 keynum = e.which  260 }  261 if(keynum == 32){  262 return false;  263 }  264 return true;  265 }  266

 


您的分享是我們最大的動力!

更多相關文章
  • 在Vue開發中,模板內的表達式非常便利,但是設計它們的初衷是用於簡單運算的。在模板中放入太多的邏輯會讓模板過重且難以維護。當你想要在模板中多次引用相同表達式時,就會更加難以處理。所以,對於任何複雜邏輯,你都應當使用計算屬性。本文主要講解Vue中的計算屬性和偵聽器,僅供學習分享使用,如有不足之前,還請... ...
  • 一、今天完成了網易郵箱註冊界面的全部編寫,編寫一個小小的網頁就需要這麼多時間來進行設計、測量、排版、編寫、測試,才能進行使用,同時編寫這個網頁複習了幾乎前面的所有內容,最後來一個彙總就可以了。 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
  • 如果是li浮動導致ul沒有寬度,給ul手動設置一個寬度或者給div一個overflow:hidden; ...
  • ``` Practice 請註冊 立即登錄> 請登錄 立即註冊> 七天內自動登錄 忘記密碼? ``` ![](https://img2018.cnblogs.com/blog/821307/201912/821307-20191210153842909-1130015050.png) ...
  • 解決z-index上層元素遮擋下層元素點擊事件問題 by:授客 QQ:1033553122 開發環境 Win 10 element-ui "2.8.2" Vue 2.9.6 需求描述 如下,有以下界面,其中右側邊時一個ElementUI Dialog模態對話框,希望在對話框上執行點擊操作時,不會點擊 ...
  • 基於HTML5 canvas 獲取文本占用的像素寬度 by:授客 QQ:1033553122 直接上代碼 // 獲取單行文本的像素寬度 getTextPixelWith(text, fontStyle) { var canvas = document.createElement("canvas"); ...
  • 引言 在開發中台過程中 我們的原型中有很多表單,antd有表單組件,但是粒度比較細,就單純組件而言,無可厚非,但是在開發過程中,可能會造成代碼不夠聚合,有些表單公共邏輯無法提取,copy paste比較多,所以可以加以封裝,搞一個相容性和擴展性都契合項目本身的組件。 主要思路 我簡單查閱了一番資料, ...
  • 1:利用DOM獲取該 div 的 ID,然後清空該DIV的內容(如果你需要接著裡面的內容添加可不要清空);需要註意點是清空最好用“ empty() ”; 2: 把 async設成true ,否則又一條警告的錯誤,這條錯誤導致你的內容顯示不出來;下麵就是警告的錯誤 3:就是添加HTML了。 具體代碼如 ...
一周排行
  • 比如要拆分“呵呵呵90909086676喝喝999”,下麵當type=0返回的是中文字元串“呵呵呵,喝喝”,type=1返回的是數字字元串“90909086676,999”, private string GetStrings(string str,int type=0) { IList<strin ...
  • Swagger一個優秀的Api介面文檔生成工具。Swagger可以可以動態生成Api介面文檔,有效的降低前後端人員關於Api介面的溝通成本,促進項目高效開發。 1、使用NuGet安裝最新的包:Swashbuckle.AspNetCore。 2、編輯項目文件(NetCoreTemplate.Web.c ...
  • 2020 年 7 月 30 日, 由.NET基金會和微軟 將舉辦一個線上和為期一天的活動,包括 微軟 .NET 團隊的演講者以及社區的演講者。本次線上大會 專註.NET框架構建微服務,演講者分享構建和部署雲原生應用程式的最佳實踐、模式、提示和技巧。有關更多信息和隨時瞭解情況:https://focu... ...
  • #abp框架Excel導出——基於vue #1.技術棧 ##1.1 前端採用vue,官方提供 UI套件用的是iview ##1.2 後臺是abp——aspnetboilerplate 即abp v1,https://github.com/aspnetboilerplate/aspnetboilerp ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 作者:碧茂大數據 PS:如有需要Python學習資料的小伙伴可以加下方的群去找免費管理員領取 input()輸入 Python提供了 input() 內置函數從標準輸入讀入一 ...
  • 從12年到20年,python以肉眼可見的趨勢超過了java,成為了當今It界人人皆知的編程語言。 python為什麼這麼火? 網路編程語言搜索指數 適合初學者 Python具有語法簡單、語句清晰的特點,這就讓初學者在學習階段可以把精力集中在編程對象和思維方法上。 大佬都在用 Google,YouT ...
  • 在社會上存在一種普遍的對培訓機構的學生一種歧視的現象,具體表現在,比如:當你去公司面試的時候,一旦你說了你是培訓機構出來的,那麼基本上你就涼了,那麼你瞞著不說,然後又通過了面試成功入職,但是以後一旦在公司被髮現有培訓經歷,可能會面臨被降薪,甚至被辭退,培訓機構出來的學生,在用人單位眼裡就是能力低下的 ...
  • from typing import List# 這道題看了大佬寫的代碼,經過自己的理解寫出來了。# 從最外圍的四周找有沒有為O的,如果有的話就進入深搜函數,然後深搜遍歷# 判斷上下左右的位置是否為Oclass Solution: def solve(self, board: List[List[s ...
  • import requests; import re; import os; # 1.請求網頁 header = { "user-agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, li ...
  • import requests; import re; import os; import parsel; 1.請求網頁 header = { "user-agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537. ...