1

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

5 回答 5

6

exec()null如果没有找到匹配项,即typeofobject not ,则返回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方法

var matchStatus = pattern.test(myString); // a boolean
于 2013-03-11T19:31:46.963 回答
1
function KeyString(elm)
{
    var pattern = /^[a-zA-Z0-9]*$/;

    if( !elm.value.match(pattern))
    {
        alert("require a-z and 0-9");
        elm.value='';
    }
}
于 2015-04-20T07:16:10.603 回答
1

如果我没有错,您的正则表达式没有提供空格,并且您的字符串中有空格。如果你想留出空间试试这种方式 /^[a-zA-z0-9\ ]*$/

于 2013-03-11T19:33:09.460 回答
1

尝试

if(matches === null){
  alert('within here');
  matchStatus=0; // matchStatus is false
};

if(matchStatus===1){
  alert("there was a match");
}

如果没有匹配,Regex.exec 返回 null,而不是未定义。所以你需要测试一下。

它似乎像你期望的那样工作:fiddle

文档execMDN

于 2013-03-11T19:33:21.437 回答
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");
}
于 2013-03-11T19:34:17.113 回答