js字符串函数

  1. 云栖社区>
  2. 博客列表>
  3. 正文

js字符串函数

webmirror 2017-04-24 18:24:42 浏览1128 评论0

摘要: 字符串转换是最基础的要求和工作,你可以将任何类型的数据都转换为字符串,你可以用下面三种方法的任何一种

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;
    }
}

用云栖社区APP,舒服~

【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!  详情请点击

网友评论

webmirror
文章132篇 | 关注33
关注
Node.js 性能平台(Node.js Performance Platform)是面向中... 查看详情
大数据商业智能套件提供海量数据实时在线分析,拖拽式操作、丰富的可视化效果,帮助您轻松自如地完... 查看详情
业内领先的面向企业的一站式研发提效平台(研发效能),通过项目流程管理和专项自动化提效工具,能... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航