JavaScript 的 strstr() 相当于 PHP 中的什么函数?

4
我写了一个小代码用于查看设置为私有的个人资料图片。但是每次访问它时,我都必须在XAMPP上启动Apache。而且,在没有安装Apache的计算机上,它几乎没什么用处。所以我想用JavaScript编写它,但找不到等效的 strstr() 函数。
请问是否有等效或替代的函数?
代码如下:
<?php
    //haystack
    $_POST['theaddress'] ='160x160/photo.jpg';

    //return all after the needle '160x160/', inclusive
    $varA = strstr($_POST['theaddress'], '160x160/');

   //build new URL
    $varA = "https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-ash3/t1.0-9"."$varA";

    header("Location: $varA");
?>

5
为什么你不使用indexOf()函数? - Mark Zucchini
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf - Matt Ball
1
谷歌搜索结果的第一个是indexOf... 您只需要输入“javascript strstr”... - oopbase
@Forlan07 希望有一个更明显的函数来分割字符串,而不是返回位置的函数。 - Daniel_V
1
我不知道为什么这个问题被投票否决或标记为不清楚。对于那些了解PHP和Javascript的人来说,这是非常清晰明了的。@hindmost - geoidesic
6个回答

4
你可以尝试这个方法:
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(‘name@example.com’, ‘@’);
    // *     returns 3: ‘@example.com’
    // *     example 4: strstr(‘name@example.com’, ‘@’, 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);
        }
    }
}

Source: http://phpjs.org/functions/strstr/


你的实际来源是这个 https://dev59.com/AGw05IYBdhLWcg3w0VAO,不是吗?;-) - oopbase
@Forlan07 不是,我的来源是使用“strstr js”在谷歌上的第一个结果。 - Magicprog.fr
无需在返回后添加其他内容。 - Danial

2
var string='aadsasdsad160x160/saddas'
    console.log(string.indexOf('160x160/'))

这将输出10


2

JavaScript字符串的indexOf()函数应该能够满足您的所有需求。

下一个示例在JavaScript中几乎与您在PHP中编写的代码相同。请记住,您需要确保有一种方法将$_POST['theaddress']传递给此函数。(例如使用PHP的setcookie()函数,然后在JavaScript代码中读取值)

function reload(fileName) {
    // define server address variable
    var serverAddress = "https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-ash3/t1.0-9";

    // get the filename
    var fileName = fileName.indexOf("160x160/");

    // set new location based on server address and filename
    location.href = serverAddress + fileName;
}

1
代码有点丑,但是它能用。使用了你的大部分代码。谢谢! 我以为会有一个更明显的函数比indexOf()更好,因为它返回字符串的位置。 - Daniel_V

1

通常当我回来时,解决方案已经提供了。

function strstr(haystack, needle, before_needle) {
    if(haystack.indexOf(needle) >= 0) 
        return before_needle ? haystack.substr(0, haystack.indexOf(needle)) 
               : haystack.substr(haystack.indexOf(needle));
    return false;
}

0

试试这个

String.prototype.strstr = function(search) {
    var position = this.indexOf(search);
    if (position == -1) {
        // not found
        return false;
    }

    return this.slice(position);
};

var x = 'Hello cruel world';
alert(x.strstr('cruel'));

这里是示例 http://jsfiddle.net/bsr3jcuw/


0
你可以创建一个像这样的函数:
function strstr(haystack, needle, bool) {  

    var pos = 0;

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

示例1:

stristr('Kevin van Zonneveld', 'Van');

返回:'van Zonneveld'。

示例2:

stristr('Kevin van Zonneveld', 'VAN', true);

返回:'Kevin '

参考资料:http://phpjs.org/functions/stristr/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接