7

引数として渡された文字列に文字のみが含まれているかどうかを最初に確認する関数があります。しかし、それは常に false として返されます。以下は私のjsfiddleです

function takeString (str) {
    var regex = "/^[A-Za-z]+$/";

    if (str.match(regex)) {
        if (str.charCodeAt(0) === str.toUpperCase().charCodeAt(0)) {
            alert('true');
            return true;
        } 
        else {
            alert('false');
            return false;
        }
    } 
    else {
        alert('Only letters please.');
    }
}

takeString('string');

上記のコードは常にアラートを出しOnly letters pleaseます。

4

1 に答える 1

9

regex正規表現をリテラルにするには、引用符を取り除く必要があります。

var regex = /^[A-Za-z]+$/;

これが更新された fiddleです。

現在、regex文字列リテラルを参照しています。正規表現オブジェクトまたはリテラルではないものを に渡すとString#match、その引数が暗黙的に正規表現オブジェクトに変換されます ( ES5 15.5.4.10を参照)。

  • Type( regexp ) が Object で、 regexp の [[Class]] 内部プロパティの値が である場合、rxregexpとする"RegExp"
  • それ以外の場合、rxを式new RegExp( regexpによって作成されたかのように作成された新しい RegExp オブジェクトにします)。ここRegExpで、 はその名前の標準組み込みコンストラクターです。

したがって、正規表現は次のように解釈されます (文字列には、正規表現リテラルを区切ると予想していたスラッシュ文字が含まれているため)。

var regex = /\/^[A-Za-z]+$\//;

スラッシュとそれに続く文字列の開始を探しているため、これは何にも一致しません。

于 2012-12-06T13:44:25.110 に答える