我正在尝试检查字符串是否全部为a-zA-Z0-9
,但这不起作用。知道为什么吗?
var pattern=/^[a-zA-Z0-9]*$/;
var myString='125 jXw'; // this shouldn't be accepted
var matches=pattern.exec(myString);
var matchStatus=1; // say matchStatus is true
if(typeof matches === 'undefined'){
alert('within here');
matchStatus=0; // matchStatus is false
};
if(matchStatus===1){
alert("there was a match");
}
答案 0 :(得分:6)
exec()
会返回null
,typeof
对象不是undefined
。
你应该用这个:
var matches = pattern.exec(myString); // either an array or null
var matchStatus = Boolean(matches);
if (matchStatus)
alert("there was a match");
else
alert('within here');
或者只使用test
method:
var matchStatus = pattern.test(myString); // a boolean
答案 1 :(得分:1)
如果我没错,你的正则表达式没有SPACE的规定,你的字符串中有空格。如果你想以这种方式允许空间/ ^ [a-zA-z0-9 \] * $ /
答案 2 :(得分:1)
尝试
if(matches === null){
alert('within here');
matchStatus=0; // matchStatus is false
};
if(matchStatus===1){
alert("there was a match");
}
如果没有匹配,则regex.exec返回null,而不是未定义。所以你需要测试一下。
它似乎像你期望的那样工作:fiddle
exec
的文档:MDN
答案 3 :(得分:0)
我只会测试它 - 在这种情况下:
var pattern = /^[a-z0-9]+$/i;
var myString = '125 jXw';
var matchStatus = 1; // say matchStatus is true
if (!pattern.test(matches)) {
matchStatus = 0; // matchStatus is false
};
if(matchStatus === 1){
alert("there was a match");
}
答案 4 :(得分:0)
function KeyString(elm)
{
var pattern = /^[a-zA-Z0-9]*$/;
if( !elm.value.match(pattern))
{
alert("require a-z and 0-9");
elm.value='';
}
}