[英]Regex to match decimal value
我有以下正则表达式匹配小数:
@"[\d]{1,4}([.][\d]{1,2})?"
但我可以输入多个小数点。 我怎么能阻止这个? 一般来说,我可以输入字符串,如“2000”或“2000.22”。 我试过使用decimal.TryParse,但我可以输入两个小数点(例如2000 ..)
这是我的类,包含验证方法:
public static class ValidationUtils
{
public static bool IsValid(string text)
{
var regex = new Regex(@"^\d{1,9}([.]\d{1,2})?$");
var success = regex.IsMatch(text);
return success;
}
}
这是页面代码中的调用 - begind:
private void OnPreviewTextInput(object sender, TextCompositionEventArgs eventArgs)
{
var box = eventArgs.OriginalSource as TextBox;
if (box == null) return;
eventArgs.Handled = !ValidationUtils.IsValid(box.Text + eventArgs.Text);
}
和TextBox的xaml:
<TextBox Text="{Binding Nominal, Mode=TwoWay,
StringFormat={}{0:0.######}, UpdateSourceTrigger=PropertyChanged,
NotifyOnValidationError=True, ValidatesOnDataErrors=True,
Converter={StaticResource decimalValueConverter}}"
PreviewTextInput="OnPreviewTextInput"/>
我在这里使用了错误的活动吗?
谢谢。
问题是你的正则表达式将匹配最后两个数字,如果它们存在,那么将字符串视为匹配。 你需要锚点告诉正则表达式,数字应该以最后的数字结束。
^\d{1,4}([.]\d{1,2})$
您不需要在\\d
周围放置方括号,也可以使用\\.
逃避点,像这样:
^\d{1,4}(\.\d{1,2})$
你需要做一些事情。 首先,您需要以^开头并以$结尾,以确保您没有任何不需要的开头或结尾字符。 接下来,你将不得不逃避。 使它成为文字。 正如你已经注意到的,你会想要的吗? 分组后,#。部分不是必需的,但允许。
这使您的最终正则表达式如下:
@"^\d{1,4}(\.\d{1,2})?$";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.