JavaScript or jQuery equivalent of PHP's strstr() function
Asked Answered
M

6

10

Is there a function in jQuery or JavaScript that does the same as strstr() in PHP?

I have an AJAX response that should be 1,2,3,12,13,23 or 123. I want to check if 1 exists, then if 2 exists then if 3 exists.

Madrigal answered 10/8, 2011 at 17:32 Comment(4)
Does your response signify an array?Lacteous
no, just a simple stringMadrigal
Are you trying to count the number of occurences for each value, or just ensure that the string contains each value?Lacteous
just to check whether it exists or notMadrigal
M
3

Ok I just found something that works!

http://my-sliit.blogspot.com/2008/06/search-string-javascript-like-strstr-in.html

Thanks for your contributions :)

Madrigal answered 10/8, 2011 at 23:59 Comment(1)
Summary: if (someString.search(/someRegularExpression/) != -1){ // Match } Sweetbread
B
15

Try using this:

function strstr(haystack, needle, bool) {
    // Finds first occurrence of a string within another
    //
    // version: 1103.1210
    // discuss at: http://phpjs.org/functions/strstr    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: strstr(‘Kevin van Zonneveld’, ‘van’);
    // *     returns 1: ‘van Zonneveld’    // *     example 2: strstr(‘Kevin van Zonneveld’, ‘van’, true);
    // *     returns 2: ‘Kevin ‘
    // *     example 3: strstr(‘[email protected]’, ‘@’);
    // *     returns 3: ‘@example.com’
    // *     example 4: strstr(‘[email protected]’, ‘@’, true);    // *     returns 4: ‘name’
    var pos = 0;

    haystack += "";
    pos = haystack.indexOf(needle); if (pos == -1) {
        return false;
    } else {
        if (bool) {
            return haystack.substr(0, pos);
        } else {
            return haystack.slice(pos);
        }
    }
}

(From http://phpjs.org/functions/strstr:551)

Overall phpjs is pretty phenomenal.

Budding answered 10/8, 2011 at 17:34 Comment(3)
sorry but does this return true/false or the rest of the string after the pattern (as in the comment in the script)Madrigal
It behaves exactly like the PHP strstr; i.e. returns false is substring not found, the rest of the string after the pattern if it is found, or the part of the string before if the optional parameter bool is true.Budding
function strstr(a,c,d){var b=0,a=a+"",b=a.indexOf(c);return-1==b?!1:d?a.substr(0,b):a.slice(b)}; if you want a short version.Sverige
M
3

Ok I just found something that works!

http://my-sliit.blogspot.com/2008/06/search-string-javascript-like-strstr-in.html

Thanks for your contributions :)

Madrigal answered 10/8, 2011 at 23:59 Comment(1)
Summary: if (someString.search(/someRegularExpression/) != -1){ // Match } Sweetbread
L
2

Read about these javascript functions - indexOF() and lastIndexOf().

Literati answered 10/8, 2011 at 17:34 Comment(0)
F
2

Well, not built in. String.indexOf( String str ) returns the integer index of the substring but then, you can easily build one: http://aimtb.wordpress.com/2011/03/16/strstr-in-javascript/

function strstr(haystack, needle, bool) {
    // Finds first occurrence of a string within another
    //
    // version: 1103.1210
    // discuss at: http://phpjs.org/functions/strstr    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: strstr(‘Kevin van Zonneveld’, ‘van’);
    // *     returns 1: ‘van Zonneveld’    // *     example 2: strstr(‘Kevin van Zonneveld’, ‘van’, true);
    // *     returns 2: ‘Kevin ‘
    // *     example 3: strstr(‘[email protected]’, ‘@’);
    // *     returns 3: ‘@example.com’
    // *     example 4: strstr(‘[email protected]’, ‘@’, true);    // *     returns 4: ‘name’
    var pos = 0;

    haystack += "";
    pos = haystack.indexOf(needle); if (pos == -1) {
        return false;
    } else {
        if (bool) {
            return haystack.substr(0, pos);
        } else {
            return haystack.slice(pos);
        }
    }
}
Fad answered 10/8, 2011 at 17:36 Comment(0)
B
0

Here is an implementation without any library/method calls:

function strstr (haystack, needle) {
    var i = 0,
        tempLength = 0,
        temp = [];
    for (;;) {
        if (haystack[i] === undefined || needle == null) {
            return "No match";
        }
        //if the char doesn't match then reset
        else if (haystack[i] !== needle[tempLength]) {
            temp = [];
            tempLength = 0;
        } 
        //the char matches so let's store it.
        else if (haystack[i] === needle[tempLength]) {
            temp[tempLength] = haystack[i];
            if (needle[tempLength + 1] === undefined) {
                return temp;
            }
            tempLength++;
        }
     i++;
   }
};
Barry answered 3/2, 2012 at 5:12 Comment(0)
T
-1

 const isSame = function(indx, haystack, needle){
    let j = 0;
    for(let i=indx, len = indx + needle.length; i< len; i++) {
       if (haystack[i] !== needle[j++]){
          return false;      
       }
    }
    return true;
}

var strStr = function(haystack, needle) {
    if (!needle) {
        return 0;
    }
        
    for(let i=0; i<haystack.length; i++) {
        if (haystack[i] === needle[0]){
           if(isSame(i, haystack, needle)){
               return i;
           };
        }
    }
    return -1;
};
console.log(strStr("hello", "ll"));
console.log(strStr("mississippi", "issip"));

Base conditions:- when needle is empty string, it will return 0. If there is no match found it will return -1.

Tarratarradiddle answered 4/11, 2020 at 4:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.