2012-05-04 135 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,我想他们有一个全球性的功能。 )) –

相关问题