閱讀371 返回首頁    go 阿裏雲 go 技術社區[雲棲]


js字符串函數

JS自帶函數

字符串轉換

字符串轉換是最基礎的要求和工作,你可以將任何類型的數據都轉換為字符串,你可以用下麵三種方法的任何一種:

  1. value.toString()
var num= 19; // 19
var myStr = num.toString(); // "19"

2.String(value)

var num= 19; // 19
var myStr = String(num); // "19"

3.隱式轉換

var num= 19; // 19
var myStr = "" +num; // "19"

字符串分割

字符串分割,即將一個字符串分割為多個字符串,JavaScript中給我們提供了一個非常方便的函數

split():根據指定分隔符將字符串分割成多個子串並返回成數組,參數包括指定的分隔符和指定數組最大長度

var myStr = "I,Love,You,Do,you,love,me";
var substrArray = myStr .split(","); // ["I", "Love", "You", "Do", "you", "love", "me"];
var arrayLimited = myStr .split(",", 3); // ["I", "Love", "You"];

獲取字符串長度

字符串長度是在開發中經常要用到的

length : 返回字符串的長度,所謂字符串的長度是指其包含的字符的個數

var myStr = "I,Love,You,Do,you,love,me";
var myStrLength = myStr.length; //25

查詢子字符串

很多人都會忘記這幾個JavaScript的自帶的方法,或者忘記它們的具體用法,從而導致在做題的時候不得不嵌套for循環來做

  • indexOf() :根據指定字符串查找下標位置從前向後檢索字符串並返回子串首次出現的下標,若未找到則返回-1, 參數必須包含要查詢的子字符串,開始查找的位置下標則可以省略,若此下標為負數則視為0,此下標省略則從默認起始位置開始查找,超出0~length-1則返回-1
var myStr = "I,Love,you,Do,you,love,me";
var index = myStr.indexOf("you"); // 7 ,基於0開始,找不到返回-1
  • lastIndexOf() : 根據指定字符串查找下標位置從後向前檢索字符串並返回子串首次出現的下標,若未找到則返回-1, 參數必須包含要查詢的子字符串,開始查找的位置下標則可以省略,若此下標為負數則視為0,此下標省略則從默認起始位置開始查找,超出0~length-1則返回-1
var myStr = "I,Love,you,Do,you,love,me";
var index = myStr.lastIndexOf("you"); // 14

字符串替換

單單查到字符串應該還不會停止,一般題目都還經常會遇到讓你查到並替換為你自己的字符串

  • replace() : 用於在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串
var myStr = "I,love,you,Do,you,love,me";
var replacedStr = myStr.replace("love","hate");//"I,hate,you,Do,you,love,me"

查找給定位置的字符或其字符編碼值

  • charAt() : 返回指定位置字符的實際值,參數有效範圍為0~length-1,若超出則返回空字符串
var get_char = a.charAt(0); //get_char = "h"

同樣,它的一個兄弟函數就是查找對應位置的字符編碼值

  • charCodeAt() : 返回字符串中第n個字符的unicode編碼,參數範圍為0~65535之間的16位整數,超出則返回NaN
var myStr = "I,love,you,Do,you,love,me";
var theChar = myStr.charCodeAt(8); //111

字符串連接

字符串連接操作可以簡單到用一個加法運算符搞定

var str1 = "I,love,you!";
var str2 = "Do,you,love,me?";
var str = str1 + str2 + "Yes!";//"I,love,you!Do,you,love,me?Yes!"

同樣,JavaScript也自帶了相關的函數

  • concat() : 將兩個或多個字符的文本組合起來,返回一個新的字符串;語法為string.concat(varue,…),參數為要連接到string上的一個或多個值,返回把所有參數都連接到字符串string上得到的新字符串,功能與"+"相同,原始字符串的實際值並未真正改變;
var str1 = "I,love,you!";
var str2 = "Do,you,love,me?";
var str = str1.concat(str2);//"I,love,you!Do,you,love,me?"

字符串切割和提取

有三種可以從字符串中抽取和切割的方法

  • slice() :與 substring 相同,根據下標提取字符串的一部分,並返回一個新字符串(負值參數與字符長度相加)
var myStr = "I,love,you,Do,you,love,me";
var subStr = myStr.slice(1,5);//",lov"
  • substring() :返回字符串的一個子串。傳入參數是起始位置和結束位置(負值參數被轉換為0)
var myStr = "I,love,you,Do,you,love,me";
var subStr = myStr.substring(1,5); //",lov"
  • substr() : 根據長度截取子串,傳入參數是起始位置和長度(參數1為負值則與字符串長度相加,參數2為返回的字符個數,為負值則轉換為0)
var myStr = "I,love,you,Do,you,love,me";
var subStr = myStr.substr(1,5); //",love"

字符串大小寫轉換

  • toLowerCase() : 將整個字符串轉成小寫字母;toLocaleLowerCase()(本地)

  • toUpperCase() : 將整個字符串轉成大寫字母;toLocaleUpperCase()(本地)

var myStr = "I,love,you,Do,you,love,me";
var lowCaseStr = myStr.toLowerCase();//"i,love,you,do,you,love,me";
var upCaseStr = myStr.toUpperCase();//"I,LOVE,YOU,DO,YOU,LOVE,ME"

字符串匹配

字符串匹配可能需要你對正則表達式有一定的了解

  • Match() : 找到一個或多個正則表達式的匹配,參數包括要進行模式匹配的正則表達式或非正則表達式(將其傳遞給RegExp()構造函數,並轉換為正則表達式對象),返回值為存放匹配結果的數組,該正則表達式有全局標記g則執行全局檢索並在找到後返回所有匹配的子串;他沒有派生屬性、不提供與子表達式匹配的文本信息、不聲明每個匹配子串的位置,可以用RegExp.exec()方法來彌補,如果沒找到則返回null;如果沒有全局標記g則隻執行一次匹配,找到的話返回數組(包括第0個元素為匹配文本,其他元素為與正則表達式匹配的文本)
var myStr = "I,love,you,Do,you,love,me";
var pattern = /love/;
var result = myStr.match(pattern);//["love"]
console.log(result.index);//2
console.log(result.input );//I,love,you,Do,you,love,me
  • exec() : 該函數是在正則上調用,傳遞字符串的參數;對於上麵兩個方法,匹配的結果都是返回第一個匹配成功的字符串,如果匹配失敗則返回null
var myStr = "I,love,you,Do,you,love,me";
var pattern = /love/;
var result = pattern .exec(myStr);//["love"]
console.log(result.index);//2
console.log(result.input );//I,love,you,Do,you,love,me
  • search() : 參數與match()相同用來檢索字符串中與正則表達式匹配的子串,找到則返回字符串中的一個與正則表達式相匹配的子串的起始位置,找不到則返回-1,他忽略了全局標記g和lastIndex()屬性
var myStr = "I,love,you,Do,you,love,me";
var pattern = /love/;
var result = myStr.search(pattern);//2

字符串比較

比較兩個字符串,比較規則是按照字母表順序比較的:

  • localeCompare():用本地特定順序比較兩個字符串,參數為與原字符串進行比較的字符串,返回值為說明比較結果的數字,為負數說明:原字符串<參數字符串,為0說明:原字符串=參數字符串,為正數說明:原字符串>參數字符串
var myStr = "chicken";
var myStrTwo = "egg";
var first = myStr.localeCompare(myStrTwo); // -1
first = myStr.localeCompare("chicken"); // 0
first = myStr.localeCompare("apple"); // 1

字符串空格清理

  • trim() : 空格處理;清除前綴及後綴空格,trimLeft()/trimRight()-清除前置/後置空格

  • 編碼方法:字符串常規編碼與解碼為escape()和unescape();URI字符串編碼與解碼:encodeURI()和decodeURI(),URI組建編碼與解碼:encodeURIComponent()和decodeURIComponent()

  • fromCharCode() : 根據字符編碼創建字符串,返回由指定編碼字符組成的新字符串,參數為零個或多個正數,代表字符的unicode編碼,靜態方法,實為構造函數string()的屬性

charCodeAt與fromCharCode互為反向操作。

舉例:

  • 去除左邊的空格:
String.prototype.LTrim = function(){
    return this.replace(/(^\s*)/g, "");
}
  • 去除右邊的空格
String.prototype.Rtrim = function(){
    return this.replace(/(\s*$)/g, "");
}
  • 去除前後空格
String.prototype.Trim = function(){
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
  • 得到左邊的字符串
String.prototype.Left = function(len){
    if(isNaN(len)||len==null){
        len = this.length;
    }else{
        if(parseInt(len)<0||parseInt(len)>this.length){
            len = this.length;
        }
    }
    return this.substr(0,len);
}
  • 得到右邊的字符串
String.prototype.Right = function(len){
    if(isNaN(len)||len==null){
        len = this.length;
    }else{
        if(parseInt(len)<0||parseInt(len)>this.length){
            len = this.length;
        }
    }
    return this.substring(this.length-len,this.length);
}
  • 得到中間的字符串,注意從0開始
String.prototype.Mid = function(start,len){
    return this.substr(start,len);
}
  • 在字符串裏查找另一字符串:位置從0開始
String.prototype.InStr = function(str){
    if(str==null){
        str = "";
    }
    return this.indexOf(str);
}
  • 在字符串裏反向查找另一字符串:位置0開始
String.prototype.InStrRev = function(str){
    if(str==null){
        str = "";
    }
    return this.lastIndexOf(str);
}
  • 計算字符串打印長度
String.prototype.LengthW = function(){
    return this.replace(/[^\x00-\xff]/g,"**").length;
}
  • 是否是正確的IP地址
String.prototype.isIP = function(){
    var reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
    if (reSpaceCheck.test(this)){
        this.match(reSpaceCheck);
        if (RegExp.$1 <= 255 && RegExp.$1 >= 0 && RegExp.$2 <= 255 && RegExp.$2 >= 0 && RegExp.$3 <= 255 && RegExp.$3 >= 0 && RegExp.$4 <= 255 && RegExp.$4 >= 0){
            return true;    
        }else{
            return false;
        }
    }else{
        return false;
    }
}
  • 是否是正確的長日期
String.prototype.isLongDate = function(){
    var r = this.replace(/(^\s*)|(\s*$)/g, "").match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
    if(r==null){
        return false;
    }
    var d = new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
    return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]);
}
  • 是否是正確的短日期
String.prototype.isShortDate = function(){
    var r = this.replace(/(^\s*)|(\s*$)/g, "").match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
    if(r==null){
        return false;
    }
    var d = new Date(r[1], r[3]-1, r[4]);
    return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
}
  • 是否是正確的日期
String.prototype.isDate = function(){
    return this.isLongDate()||this.isShortDate();
}
  • 是否是手機
String.prototype.isMobile = function(){
    return /^0{0,1}13[0-9]{9}$/.test(this);
}
  • 是否是郵件
String.prototype.isEmail = function(){
    return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(this);
}
  • 是否是郵編(中國)
String.prototype.isZipCode = function(){
    return /^[\\d]{6}$/.test(this);
}
  • 是否是有漢字
String.prototype.existChinese = function(){//[\u4E00-\u9FA5]為漢字﹐[\uFE30-\uFFA0]為全角符號
    return /^[\uFE30-\uFFA0]*$/.test(this);
}
  • 是否是合法的文件名/目錄名
String.prototype.isFileName = function(){
    return !/[\\\/\*\?\|:"<>]/g.test(this);
}
  • 是否是有效鏈接
String.prototype.isUrl = function(){
    return /^http[s]?:\/\/([\w-]+\.)+[\w-]+([\w-./?%&=]*)?$/i.test(this);
}
  • 是否是有效的身份證(中國)
String.prototype.isIDCard = function(){
    var iSum=0,info="",sId = this;
    var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍 江",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖 北",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"雲南",54:"西藏",61:"陝西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"台灣",81:"香港",82:"澳門",91:"國外"};
    if(!/^\d{17}(\d|x)$/i.test(sId)){
        return false;
    }
    sId=sId.replace(/x$/i,"a");
    //非法地區
    if(aCity[parseInt(sId.substr(0,2))]==null){
        return false;
    }
    var sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
    var d=new Date(sBirthday.replace(/-/g,"/"))
    //非法生日
    if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate())){
        return false;
    }
    for(var i = 17;i>=0;i--){
        iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11);
    }
    if(iSum%11!=1){
        return false;
    }
    return true;
}
  • 是否是有效的電話號碼(中國)
String.prototype.isPhoneCall = function(){
    return /(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/.test(this);
}
  • 是否是數字
String.prototype.isNumeric = function(flag)
{
//驗證是否是數字
if(isNaN(this)){
    return false;
}
switch(flag){
    case null:        //數字
    case "":
        return true;
    case "+":        //正數
        return                /(^\+?|^\d?)\d*\.?\d+$/.test(this);
    case "-":        //負數
        return                /^-\d*\.?\d+$/.test(this);
    case "i":        //整數
        return                /(^-?|^\+?|\d)\d+$/.test(this);
    case "+i":        //正整數
        return                /(^\d+$)|(^\+?\d+$)/.test(this);                       
    case "-i":        //負整數
        return                /^[-]\d+$/.test(this);
    case "f":        //浮點數
        return                /(^-?|^\+?|^\d?)\d*\.\d+$/.test(this);
    case "+f":        //正浮點數
        return                /(^\+?|^\d?)\d*\.\d+$/.test(this);                       
    case "-f":        //負浮點數
        return                /^[-]\d*\.\d$/.test(this);               
    default:        //缺省
        return true;  
}
  • 是否是顏色(#FFFFFF形式)
String.prototype.IsColor = function(){
    var temp = this;
    if (temp=="") return true;
    if (temp.length!=7) return false;
    return (temp.search(/\#[a-fA-F0-9]{6}/) != -1);
}
  • 轉換成全角
String.prototype.toCase = function(){
    var tmp = "";
    for(var i=0;i<this.length;i++){
        if(this.charCodeAt(i)>0&&this.charCodeAt(i)<255){
            tmp += String.fromCharCode(this.charCodeAt(i)+65248);
        }else{
            tmp += String.fromCharCode(this.charCodeAt(i));
        }
    }
    return tmp
}
  • 對字符串進行Html編碼
String.prototype.toHtmlEncode = function(){
    var str = this;
    str=str.replace(/&/g,"&amp;");
    str=str.replace(/</g,"&lt;");
    str=str.replace(/>/g,"&gt;");
    str=str.replace(/\'/g,"&apos;");
    str=str.replace(/\"/g,"&quot;");
    str=str.replace(/\n/g,"<br>");
    str=str.replace(/\ /g,"&nbsp;");
    str=str.replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;");
    return str;
}
  • 轉換成日期
String.prototype.toDate = function(){
    try{
        return new Date(this.replace(/-/g, "\/"));
    }
    catch(e){
        return null;
    }
}

最後更新:2017-04-24 21:32:59

  上一篇:go PostgreSQL 如何實現批量更新、刪除、插入
  下一篇:go PostgreSQL upsert功能(insert on conflict do)的用法