2012-05-04 136 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"); 

在下面的結果,第五個項目應該已經翻了假。我在這裏錯過了什麼?

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

瞧!問題解決了。奇怪的是,原始版本在PHP腳本中運行得非常好。 –

+0

它不應該給你正確的結果。但那是PHP,我想他們有一個全球性的功能。 )) –

相關問題