任何人都可以告诉我为什么这不适用于整数而是适用于角色?我真的很讨厌reg表达,因为它们很神秘,但如果我也有。另外,我想在有效字符中加入“ - ()”。
String.prototype.Contains = function (str) {
return this.indexOf(str) != -1;
};
var validChars = '0123456789';
var str = $("#textbox1").val().toString();
if (str.Contains(validChars)) {
alert("found");
} else {
alert("not found");
}
答案 0 :(得分:4)
查看强>
String.prototype.Contains = function (str) {
return this.indexOf(str) != -1;
};
如果str
包含在其中,则此字符串“方法”返回true,例如'hello world'.indexOf('world')!= -1 would return
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()]+$')
的缩写。
答案 1 :(得分:1)
您正在将validChars
的完整列表传递给indexOf()
。您需要遍历字符并逐个检查它们。
<强> Demo 强>
String.prototype.Contains = function (str) {
var mychar;
for(var i=0; i<str.length; i++)
{
mychar = this.substr(i, 1);
if(str.indexOf(mychar) == -1)
{
return false;
}
}
return this.length > 0;
};
要在整数上使用它,您可以将整数转换为String()
的字符串,如下所示:
var myint = 33; // define integer
var strTest = String(myint); // convert to string
console.log(strTest.Contains("0123456789")); // validate against chars
答案 2 :(得分:0)
假设您正在寻找验证输入的功能,请考虑validChars
参数:
String.prototype.validate = function (validChars) {
var mychar;
for(var i=0; i < this.length; i++) {
if(validChars.indexOf(this[i]) == -1) { // Loop through all characters of your string.
return false; // Return false if the current character is not found in 'validChars' string.
}
}
return true;
};
var validChars = '0123456789';
var str = $("#textbox1").val().toString();
if (str.validate(validChars)) {
alert("Only valid characters were found! String validates!");
} else {
alert("Invalid Char found! String doesn't validate.");
}
然而,这是字符串验证的大量代码。我建议考虑使用正则表达式。 (杰克有一个nice answer up here)
答案 3 :(得分:0)
我只是猜测,但看起来你正试图检查一个电话号码。更改函数的一种简单方法是使用RegExp检查字符串值。
String.prototype.Contains = function(str) {
var reg = new RegExp("^[" + str +"]+$");
return reg.test(this);
};
但它不会检查字符串中的符号序列。
检查电话号码更复杂,因此RegExp是一种很好的方法(即使你不喜欢它)。它看起来像:
String.prototype.ContainsPhone = function() {
var reg = new RegExp("^\\([0-9]{3}\\)[0-9]{3}-[0-9]{2}-[0-9]{2}$");
return reg.test(this);
};
此变体会检查"(123)456-78-90"
等手机。它不仅检查字符列表,还检查字符串中的序列。
答案 4 :(得分:0)
谢谢大家的回答!看起来我会使用正则表达式。我已经尝试了所有这些解决方案,但我真的希望能够传递一串validChars,但我会传入一个正则表达式。
这适用于单词,字母,但不适用于整数。我想知道为什么它对整数不起作用。我希望能够通过在textBox上使用自定义属性,从MVC中的ajax控件工具包模仿FilteredTextBoxExtender