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;
    }
}
目录
相关文章
|
存储 网络协议 Linux
怎么在阿里云屏蔽一些IP?
在Linux中,可以很简单地用netfilter/iptables框架禁止IP地址: $ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP   如果你想要完全屏蔽一个IP地址段,你可以用下面的命令很简单地做到: $ sudo iptables -A INPUT -s 1.1.2.0/24 -p TCP -j DROP   然而,当你有1000个独立IP地址,且不带CIDR(无类别域间路由)前缀,你该怎么做?你要有1000条iptable规则!这显然这并不适于大规模屏蔽。
3206 0
|
22天前
|
人工智能 供应链 前端开发
技术突破丨大模型产业化最好的时代,中国 AI“杀死”了参数崇拜
一个由中国创新力决定全球“工业革命”潮水袭向哪 里的时代,正在到来
|
7月前
|
Java 数据库连接 应用服务中间件
基于springboot的母婴健康交流系统
本平台旨在为新手父母提供专业、系统的婴幼儿健康知识与交流空间,整合权威资源,解决育儿信息碎片化与误导问题,支持经验分享与情感互助,助力科学育儿。
|
人工智能 运维 安全
中英双语去AI味Skill!含金量老金就不用多说了吧!
加我进AI讨论学习群,公众号右下角“联系方式” 文末有老金的 **开源知识库地址·全免费** * * * 上周老金我帮一个朋友看他用AI写的产品介绍。 他很得意地发过来,说"看看写得怎么样"。 老金我扫了两眼就回了一句:这一看就是AI写的。 他不信,问哪里看出来的。 老金我指了三个地方: "此外"出现了4次。 "至关重要"出现了2次。 结尾写了一句"让我们拭目以待"。
|
3月前
|
人工智能 安全 测试技术
HCL AppScan Standard 10.10.0 for Windows x64 - Web 应用程序安全测试
HCL AppScan Standard 10.10.0 for Windows x64 - Web 应用程序安全测试
343 4
HCL AppScan Standard 10.10.0 for Windows x64 - Web 应用程序安全测试
|
4月前
|
传感器 运维 算法
数字孪生项目的开发费用
数字孪生项目费用从几十万到数千万不等,核心成本在于三维建模精度与数据打通深度。基础展示型侧重可视化,工业级需系统集成与算法支持,城市级则涉及大规模扫描、仿真与定制引擎开发。建模等级(LOD)、数据获取难度和渲染方式是影响价格三大变量。预算50万内可选轻量化方案,200万以上可实现生产联动与智能决策。#数字孪生 #webgl开发 #软件外包公司
|
4月前
|
弹性计算 人工智能
阿里云优惠券详解:免费领取、查询、使用以及个人、企业和学生代金券领取入口整理
阿里云优惠券免费领取攻略:个人、企业及学生均可领,最高享2088元代金券+6折整单折扣。学生专享300元无门槛券,企业可申5亿算力补贴。附领取入口、查询与使用教程,购云服务器更省钱!
|
5月前
|
存储 运维 安全
一篇文章带你了解什么是云计算,SaaS PaaS IaaS的区别
云计算将硬件与软件资源集中于云端,企业按需租用,实现弹性扩容、降低成本。相比本地部署,云服务在运维、安全、效率上优势显著,并通过SaaS、PaaS、IaaS分层提供灵活支持,助力企业高效发展。(238字)
657 3
|
5月前
|
JavaScript 数据挖掘 大数据
基于python大数据的房价数据分析系统
本研究基于Python构建大数据房价分析系统,整合多源数据,运用Django、Vue.js与MySQL技术,实现数据采集、处理、建模与可视化,助力政府调控、企业决策与购房者选择,提升房地产信息化水平。
Proxy error: Could not proxy request
Proxy error: Could not proxy request
2870 0
Proxy error: Could not proxy request