0

Actionscript 3 では、正規表現を使用してユーザー入力をテストしようとしています。次のコードは、文字列をテストします。

private function ValidateModifier(tst:String):Boolean
{
    var validDieRoll:RegExp = /([+-]?)([0-9]+)d([0-9]+)/;
    return ( validDieRoll.test( tst ) );
}

文字列シーケンスの先頭に + または - 記号を許可することになっていますが、1 つだけです。ただし、 ? を無視しているようです。任意の数の + または - 記号を受け入れる量指定子。

私はこの値の配列でテストしています:

tmpArray.push("3d6");
tmpArray.push("d36");
tmpArray.push("-3d6");
tmpArray.push("+d3");
tmpArray.push("++--+3d6");
tmpArray.push("d3");
tmpArray.push("3d");

次の結果では、5 番目の項目が false になっているはずです。ここで何が欠けていますか?

3d6 = true
d36 = false
-3d6 = true
+d3 = false
++--+3d6 = true
d3 = false
3d = false

これらの正規表現の順列を試してみましたが、まったく同じ結果が得られました。

var validDieRoll:RegExp = /([+-]{0,1})([0-9]+)d([0-9]+)/;
var validDieRoll:RegExp = /([+-]{0,1}?)([0-9]+)d([0-9]+)/;
4

1 に答える 1

1

+/- が文字列シーケンスの先頭にあることについて、あなたは何も言いませんでした。したがって、指定したものが含まれているため、元のパターンは「++--+3d6」に一致します。

^パターンの最初と$最後に追加します。

var validDieRoll:RegExp = /^([+-]?)(\d+)d(\d+)$/;
于 2012-05-04T07:01:34.167 に答える