C#中用于货币值的正则表达式验证

3

必须接受:

1,111.111000.00

不应接受:

,1111,11,111.00.00

目前有这段代码:

if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "[^0-9]"))
{
    MessageBox.Show("Please enter only numbers.");
    //textBox1.Text.Remove(textBox1.Text.Length - 1);
    textBox1.Text = string.Empty;
}

仅接受数字


如果是Web表单应用程序,您可以使用Ajax Control Toolkit中的Masked Edit Extender。http://ajaxcontroltoolkit.com/MaskedEdit/MaskedEdit.aspx - Hakunamatata
有效数字应该是小数点前4位,小数点后2位吗? - Ankit
2个回答

4

与其使用正则表达式验证自己,不如使用一些内置功能来获得所需的结果。

其中一种方法是:

var culture = CultureInfo.CreateSpecificCulture("en-US");
decimal currency;
if (Decimal.TryParse(textBox1.text, NumberStyles.Currency, culture, out currency))
{
   // Its a valid currency value
}
else {
  // NOt a valid currency.
  MessageBox.Show("Please enter a valid currency.");
}

这将适用于您希望在不同文化中使用应用程序的情况(前提是您没有硬编码“en-US”)。
阅读有关Decimal.TryParse的更多信息

我试过使用 CultureInfo.CreateSpecificCulture("es-ES") 来禁止 1,11,11,但它却接受了 1.11.11,而 en-US 是检查不通过的。 - ajbee

1

我不是正则表达式专家,但这对我来说似乎有效。

\d{1,3}(,\d{3})+(\.\d{2})?

"[\d{1,3}(,\d{3})+(.\d{2})?]":无法识别的转义序列错误。 - ajbee
\ 是C#中的转义序列。你需要将其改为\d而不是\d。抱歉。 - Matthew Chrobak
1
或者在字符串开头加上一个 @ 符号。 - Juan Ruiz de Castilla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接