检查字符串是否以多个字符结尾

时间:2017-07-13 00:18:36

标签: javascript

我如何检查字符串是否以多个字符中的任何一个结尾?目前,此代码返回false,即使字符串以问号结尾。如果字符串以句点,感叹号或问号结束,则正常工作的代码将返回true,如果其最后一个字符是其他任何字符,则返回false。

显然我可以独立检查这些条件但是假设我有一个很长的清单,肯定有更好的方法吗?



function myFunction() {
    var str = "Hello?";
    var n = str.endsWith(".", "!", "?");
    document.getElementById("demo").innerHTML = n;
}

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:13)

endsWith只是不需要多个字符串来测试。您可以定义它们的数组,并使用endsWith检查每个值:

function endsWithAny(suffixes, string) {
    return suffixes.some(function (suffix) {
        return string.endsWith(suffix);
    });
}

function myFunction() {
    var str = "Hello?";
    var n = endsWithAny([".", "!", "?"], str);
    document.getElementById("demo").innerHTML = n;
}

或者使用正则表达式进行一次性使用:

var n = /[.!?]$/.test(str);

答案 1 :(得分:1)

由于某种原因,被接受的答案的功能给我带来了问题,因此我编写了适用于我的此功能:

//check if string ends with any of array suffixes
function endsWithAny(suffixes, string) {
    for (let suffix of suffixes) {
        if(string.endsWith(suffix))
            return true;
    }
    return false;
}

所以您的功能就是

function myFunction() {
    var str = "Hello?";
    var n = endsWithAny([".", "!", "?"], str);
    document.getElementById("demo").innerHTML = n;
}

答案 2 :(得分:1)

您可以将indexOfslice结合使用:

function myFunction() {
    var str = "Hello?";
    var n = '.!?'.indexOf(str.slice(-1)) >= 0;
    document.getElementById("demo").innerHTML = n;
}
<button onclick="myFunction()">Try it</button>

<p id="demo"></p>