用于检查字符串是否为a-zA-Z0-9的正则表达式

时间:2013-03-11 19:29:29

标签: javascript

我正在尝试检查字符串是否全部为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");
}

5 个答案:

答案 0 :(得分:6)

如果找不到匹配项,

exec()会返回nulltypeof对象不是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='';
    }
}