0

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

在以下结果中,第五项应该是错误的。我在这里想念什么?

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 回答