/*______________ | ______ | U I Z E J A V A S C R I P T F R A M E W O R K | / / | --------------------------------------------------- | / O / | MODULE : Uize.Str.Has Package | / / / | | / / / /| | ONLINE : http://uize.com | /____/ /__/_| | COPYRIGHT : (c)2007-2016 UIZE | /___ | LICENSE : Available under MIT License or GNU General Public License |_______________| http://uize.com/license.html */ /* Module Meta Data type: Package importance: 4 codeCompleteness: 100 docCompleteness: 100 */ /*? Introduction The =Uize.Str.Has= module provides methods for testing if a string starts with, ends with, or contains a specified substring. *DEVELOPERS:* `Chris van Rensburg` */ Uize.module ({ name:'Uize.Str.Has', builder:function () { 'use strict'; /*** Utility Functions ***/ function _stringHasPrefixOrSuffix (_sourceStr,_subStr,_isSuffixTest) { if (!_subStr) return true; var _sourceStrLength = _sourceStr.length, _subStrLength = _subStr.length, _startPos = _isSuffixTest ? _sourceStrLength - _subStrLength : 0, _endPos = _startPos + _subStrLength - 1 ; return ( _subStrLength <= _sourceStrLength && _sourceStr.charCodeAt (_startPos) == _subStr.charCodeAt (0) && ( _subStrLength == 1 || ( _sourceStr.charCodeAt (_endPos) == _subStr.charCodeAt (_subStrLength - 1) && ( _subStrLength == 2 || ( _subStrLength == _sourceStrLength ? _subStr == _sourceStr : _isSuffixTest ? _sourceStr.indexOf (_subStr,_startPos) == _startPos : _sourceStr.lastIndexOf (_subStr,_endPos) == 0 ) ) ) ) ); } return Uize.package ({ has:function (_sourceStr,_subStr) { return ( _subStr.length <= _sourceStr.length && ( _stringHasPrefixOrSuffix (_sourceStr,_subStr) || _stringHasPrefixOrSuffix (_sourceStr,_subStr,true) || _sourceStr.indexOf (_subStr) > -1 ) ); /*? Static Methods Uize.Str.Has.has Returns a boolean, indicating whether or not the specified source string has the specified substring. SYNTAX .............................................. hasBOOL = Uize.Str.Has.has (sourceSTR,subSTR); .............................................. If a source string starts with or ends with a substring, then that source string also has the substring. In other words, if =Uize.Str.Has.hasPrefix (sourceStr,subStr)= returns =true=, or if =Uize.Str.Has.hasSuffix (sourceStr,subStr)= returns =true=, then =Uize.Str.Has.has (sourceStr,subStr)= must also return =true=. EXAMPLES ........................................................................ Uize.Str.Has.has ('JavaScript','Java'); // returns true Uize.Str.Has.has ('JavaScript','JavaScript'); // returns true Uize.Str.Has.has ('JavaScript','Script'); // returns true Uize.Str.Has.has ('JavaScript','S'); // returns true Uize.Str.Has.has ('JavaScript','ava'); // returns true Uize.Str.Has.has ('JavaScript',''); // returns true Uize.Str.Has.has ('',''); // returns true Uize.Str.Has.has ('JavaScript','JAVASCRIPT'); // returns false Uize.Str.Has.has ('JavaScript','script'); // returns false Uize.Str.Has.has ('Java','JavaScript'); // returns false Uize.Str.Has.has ('JavaScript','Java Script'); // returns false Uize.Str.Has.has ('JavaScript','JavaScript '); // returns false Uize.Str.Has.has ('JavaScript',' JavaScript'); // returns false Uize.Str.Has.has ('JavaScript','JavaScript Framework'); // returns false ........................................................................ NOTES - see the related =Uize.Str.Has.hasPrefix= and =Uize.Str.Has.hasSuffix= static methods - this method is case sensitive */ }, hasSuffix:function (_sourceStr,_subStr) { return _stringHasPrefixOrSuffix (_sourceStr,_subStr,true); /*? Static Methods Uize.Str.Has.hasSuffix Returns a boolean, indicating whether or not the specified source string ends with the specified suffix string. SYNTAX ....................................................... hasSuffixBOOL = Uize.Str.Has.hasSuffix (sourceSTR,subSTR); ....................................................... The test that this method performs is case and space sensitive. In cases where you need to test without regards to case or whitespace, it is best to construct a regular expression using the "$" (anchor to end) metacharacter and the =i= (case-insensitivity) switch. EXAMPLES .............................................................................. Uize.Str.Has.hasSuffix ('JavaScript','Java'); // returns false Uize.Str.Has.hasSuffix ('Java','JavaScript'); // returns false Uize.Str.Has.hasSuffix ('JavaScript','JavaScript'); // returns true Uize.Str.Has.hasSuffix ('JavaScript','Java Script'); // returns false Uize.Str.Has.hasSuffix ('JavaScript','JavaScript '); // returns false Uize.Str.Has.hasSuffix ('JavaScript',' JavaScript'); // returns false Uize.Str.Has.hasSuffix ('JavaScript','JAVASCRIPT'); // returns false Uize.Str.Has.hasSuffix ('JavaScript','Script'); // returns true Uize.Str.Has.hasSuffix ('JavaScript','JavaScript Framework'); // returns false Uize.Str.Has.hasSuffix ('JavaScript',''); // returns true .............................................................................. NOTES - see the companion =Uize.Str.Has.hasPrefix= static method - see the related =Uize.Str.Has.has= static method - when the value =''= (empty string) is specified for the =subSTR= parameter, this method will return =true= (all strings can be said to end with an empty string) */ }, hasPrefix:_stringHasPrefixOrSuffix /*? Static Methods Uize.Str.Has.hasPrefix Returns a boolean, indicating whether or not the specified source string starts with the specified prefix string. SYNTAX .......................................................... hasPrefixBOOL = Uize.Str.Has.hasPrefix (sourceSTR,subSTR); .......................................................... The test that this method performs is case and space sensitive. In cases where you need to test without regards to case or whitespace, it is best to construct a regular expression using the "^" (anchor to beginning) metacharacter and the =i= (case-insensitivity) switch. EXAMPLES .............................................................................. Uize.Str.Has.hasPrefix ('JavaScript','Java'); // returns true Uize.Str.Has.hasPrefix ('Java','JavaScript'); // returns false Uize.Str.Has.hasPrefix ('JavaScript','JavaScript'); // returns true Uize.Str.Has.hasPrefix ('JavaScript','Java Script'); // returns false Uize.Str.Has.hasPrefix ('JavaScript','JavaScript '); // returns false Uize.Str.Has.hasPrefix ('JavaScript',' JavaScript'); // returns false Uize.Str.Has.hasPrefix ('JavaScript','JAVASCRIPT'); // returns false Uize.Str.Has.hasPrefix ('JavaScript','Script'); // returns false Uize.Str.Has.hasPrefix ('JavaScript','JavaScript Framework'); // returns false Uize.Str.Has.hasPrefix ('JavaScript',''); // returns true .............................................................................. NOTES - see the companion =Uize.Str.Has.hasSuffix= static method - see the related =Uize.Str.Has.has= static method - when the value =''= (empty string) is specified for the =subSTR= parameter, this method will return =true= (all strings can be said to start with an empty string) */ }); } });