我们都知道Java中的String提供了用于判断是否以指定字符串开头、结尾的方法。分别是startWith和endWith,但是最近开发过程中我也遇到了类似的问题只不过是在javascript中,需要判断一个链接地址是否以http://开头或判断一个地址是否以"/"开头。
但是通过查看API,原生的javascript的String并没有提供现成的办法来解决此类需求。因此我就开始想办法如何能够正确的判断某个字符串是否以指定的字符串开始或者结尾。
后来终于找到了好的办法,特记录如下。
我会首先将代码和测试用例贴上,然后再具体解释为什么要这么写
//判断当前字符串是否以str开始 先判断是否存在function是避免和js原生方法冲突,自定义方法的效率不如原生的高 if (typeof String.prototype.startsWith != 'function') String.prototype.startsWith = function (str){ return this.slice(0, str.length) == str; }; }
//判断当前字符串是否以str结束 if (typeof String.prototype.endsWith != 'function') { String.prototype.endsWith = function (str){ return this.slice(-str.length) == str; }; } //测试程序 var sCompareStr = "abcdefg123";//比较字符串 var sBeCompareStr = "fg";//被比较字符串 if(sCompareStr.endsWith(sBeCompareStr)){//这里可以替换为startsWith alert(sCompareStr+" 是以:"+sBeCompareStr+" 结束"); }else{ alert(sCompareStr+" 不是以:"+sBeCompareStr+" 结束"); }
这样书写的原因:
- 之所以在将整个代码放在if判断中是因为避免以后原生的js版本中增加了同类方法而导致代码效率降低。因为对于同名方法来说,js原生的代码效率要高于用户自己扩展的方法
- 之所以使用slice方法而不使用indexof方法,是由于indexof方法在处理较长的字符串时效率比较低
最后注明一下版权,本文由yutiansanshou原创发表,你可以任意转载,但必需在明显位置注明作者和出处,而且不能用于任何商业用途