正则表达式:为什么@“^([0-9] | 10)”不匹配'10'?

时间:2011-02-15 13:33:45

标签: asp.net regex asp.net-mvc-2

我想验证一个文本框仅包含010之间的数字。

这是我目前正在使用的正则表达式:

@"^([0-9]|10)"

但它只匹配0-9。我应该更改什么以使其匹配10 ??

谢谢!

4 个答案:

答案 0 :(得分:15)

来自1的{​​{1}}与10匹配,因为正则表达式引擎从左到右匹配。由于您只锚定了输入的开头:[0-9],如果匹配^,则引擎会满意。

有两种解决方案。

1 - 交换它:

1

2 - 用@"^(10|[0-9])"

锚定它
$

答案 1 :(得分:2)

^(10|[0-9])

因为[0-9]首先与10中的1匹配。

答案 2 :(得分:1)

它可能是“懒惰的”,匹配第一个潜在的匹配,即“1”与“10”。也许尝试切换顺序:

"^(10|[0-9])"

这意味着正则表达式将首先检查“10”,并且仅在没有“10”的情况下检查[0-9]

如果这不起作用,可能会有一个标志

答案 3 :(得分:0)

使用此@“^(10 | [0-9])”。换句话说,它会将10中的1个视为第一个条件的第一个匹配,因此不会落在OR条件下。