我們都知道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原創發表,你可以任意轉載,但必需在明顯位置注明作者和出處,而且不能用於任何商業用途