检查函数中字符串的后缀

时间:2012-01-09 20:37:41

标签: javascript jquery

我下载了这个endsWith函数 -

String.prototype.endsWith = function(suffix) {
    return this.match(suffix+"$") == suffix;
}

我正在尝试使用它来验证带有

的表单输入
function validator(form){
    var input = form.user.value;

    if(input.endsWith("vdr")) {
        if(input != ""){
            $('#userb').fadeOut("fast");
            $('#userk').fadeIn("fast");
        }
    }else{
        $('#userk').fadeOut("fast");
        $('#userb').fadeIn("fast");
    }
}

我正在使用jQuery来显示div。问题是它没有做任何事情,因为它没有检查endsWith(),它可能是导致麻烦的函数。为什么这不起作用?是否有任何替代方案可以使用?

4 个答案:

答案 0 :(得分:2)

.match将返回一个数组/未定义,具体取决于它是否匹配。只需将其转换为布尔值:

String.prototype.endsWith = function(suffix) {
    return !!this.match(suffix+"$");
}

这是一个演示:http://jsfiddle.net/KcvMZ/

答案 1 :(得分:2)

您只是在测试条件,因此RegExp.test更适用。所以...

String.prototype.endsWith = function(suffix) {
    return RegExp(suffix+"$").test(this);
}

......应该有用。

答案 2 :(得分:1)

String.match返回一系列匹配项。尝试这样的事情:

String.prototype.endsWith = function(suffix) {
    return this.match(suffix+"$")[0] === suffix;
}

答案 3 :(得分:1)

基于Regexp的实现存在缺陷,因为它们不考虑特殊字符:

  alert("100$".endsWith("$")) // surprise

非正则表达式代码是正确的,也可能更快:

String.prototype.endsWith = function(suffix) {
    var n = this.lastIndexOf(suffix);
    return n >= 0 && n == this.length - suffix.toString().length
}