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一致するものが見つからない場合、つまり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方法を使用します。

var matchStatus = pattern.test(myString); // a boolean
于 2013-03-11T19:31:46.963 に答える
1

間違っていない場合、正規表現にはSPACEのプロビジョニングがなく、文字列にはスペースが含まれています。スペースを許可したい場合は、この方法を試してください/ ^ [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を返します。未定義ではありません。だからあなたはそれをテストする必要があります。

それはあなたがそのように期待するように働くようです:フィドル

ドキュメントexecMDN

于 2013-03-11T19:33:21.437 に答える
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 に答える
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 に答える