2012-05-04 4 views
0

Actionscript 3では、私は正規表現を使用してユーザー入力をテストしようとしています。 - 文字列シーケンスの初めに看板、一つだけ+またはを許可するようになっているActionscript 3 RegExp量子が正しく動作しないようですか?

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

:次のコードは、文字列をテストします。しかし、それを無視しているようです?任意の数の+または - 記号を受け入れることができます。私は、この値の配列をテストしてい

:次の結果で

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

、5番目の項目は偽を上がっているはずです。私はここで何が欠けていますか?

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]+)/; 

答えて

1

あなたは最初の文字列の順序のにいる+/-についての事を言いませんでした。だから、あなたのオリジナルのパターンはあなたが指定したものを含んでいるので、 "++ - + 3d6"にマッチします。

パターンの先頭に^を追加し、最後に$を追加します。

var validDieRoll:RegExp = /^([+-]?)(\d+)d(\d+)$/; 
+0

Voila!問題が解決しました。不思議にも、元のバージョンはPHPスクリプトでうまく機能していました。 –

+0

正しい結果が得られてはいけません。しかし、それはPHPだ、私はそれがグローバルな機能を持っていると思う。 )) –

関連する問題