Actionscript 3 RegExp量词似乎不能正常工作?

时间:2012-05-04 04:48:13

标签: regex actionscript regex-greedy

在Actionscript 3中,我试图使用正则表达式来测试用户输入。以下代码测试字符串:

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");

在以下结果中,第五项应该显示为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]+)/;

1 个答案:

答案 0 :(得分:1)

你没有说过字符串序列的开头 +/- 。因此,您的原始模式为“++ - + 3d6”提供了匹配,因为它确实包含您指定的内容。

在模式的开头添加^,最后添加$

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