我下载了这个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(),它可能是导致麻烦的函数。为什么这不起作用?是否有任何替代方案可以使用?
答案 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
}