特殊情况的正则表达式

use*_*126 1 c# regex

我需要为以下场景创建一个正则表达式.

它只能有数字,只有一个点或逗号.

第一部分可以有一到三个数字.第二部分可以是点或逗号.第三部分可以有一到两个数字.

有效的方案是

123,12
123.12
123,1
123
12,12
12.12
1,12
1.12
1,1
1.1
1
Run Code Online (Sandbox Code Playgroud)

到目前为止,我带着这个表情走了过来

\d{1,3}(?:[.,]\d{1,2})?
Run Code Online (Sandbox Code Playgroud)

但它效果不好.例如,输入为11:11被标记为有效.

ste*_*ema 5

你需要在你的表达式周围放置锚点:

^\d{1,3}(?:[.,]\d{1,2})?$
Run Code Online (Sandbox Code Playgroud)

^ 将匹配字符串的开头

$ 将匹配字符串的结尾

如果缺少这些锚点,它将在你的字符串上部分匹配,因为最后一部分是可选的,意味着在"11:11"它可以匹配冒号前的数字,第二个匹配将在冒号后的数字上.