回顾
String.prototype.Contains = function (str) {
return this.indexOf(str) != -1;
};
这个 "method" 方法返回 true 如果 str
在自身中被包含,例如 'hello world'.indexOf('world') != -1将返回
true`。
var validChars = '0123456789';
var str = $("#textbox1").val().toString();
$('#textbox1').val()
的值已经是字符串,所以这里不需要使用
.toString()
。
if (str.Contains(validChars)) {
alert("found");
} else {
alert("not found");
}
这就是问题所在:实际上,这将执行'1234'.indexOf('0123456789') != -1
;它几乎总是会返回false
,除非你有一个像10123456789
这样的大数字。
你可以对str
中的每个字符进行测试,看它们是否包含在'0123456789'
中,例如'0123456789'.indexOf(c) != -1
,其中c
是str
中的一个字符。但它其实可以更简单。
解决方法
我知道你不喜欢正则表达式,但在这些情况下它们非常有用:
if ($("#textbox1").val().match(/^[0-9()]+$/)) {
alert("valid");
} else {
alert("not valid");
}
解释
[0-9()]
是一个字符类,包括范围为 0-9
,即表示 0123456789
的数字和圆括号 ()
。
[0-9()]+
匹配至少一个符合上述字符类的字符。
^[0-9()]+$
匹配所有字符都符合该字符类的字符串;^
和 $
分别匹配字符串的开头和结尾。
最后,整个表达式两侧用 /
表示正则表达式的定界符。它等价于 new RegExp('^[0-9()]+$')
。
(string)intVar
编辑: 在JavaScript中可能不起作用。 - qwertystr
已经被转换为.toString();
,所以这不是必要的。 - Cerbrus