【问题标题】:asp.net c# Regular Expression Validator for formatted numbersasp.net c# 格式化数字的正则表达式验证器
【发布时间】:2017-06-05 11:38:56
【问题描述】:

我有一个带有数值的文本框。例如号码是 23542.56。该数字在 MySQL 数据库中存储为 double。

我将数字转换为十进制并将其格式化为字符串,同时使用 ...ToString("N") 从数据库中加载带有千位分隔符的值。

TextBox.Text = Convert.ToDecimal(mdr["Value"].ToString()).ToString("N");

我的正则表达式验证器只接受数字和逗号:

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox" ValidationExpression="^\d+(\,\d+$)?$" ValidationGroup="NumericValidate">Allowed Chars are: 0-9 und ,</asp:RegularExpressionValidator>

问题是验证器不接受格式化数字,例如 23.542,56。什么是让他只接受“0-9 and”但也接受千位分隔符的正确方法?

提前谢谢...

信息:将“28542.56”显示为“23.542,56”是德国的常用符号,这就是我以这种方式格式化数字的原因。

【问题讨论】:

  • 如果没有 exact 输入字符串和预期的输出/行为,很难回答正则表达式问题。进入正则表达式引擎的字符串类型是什么? 23542.56 还是 23.542,56?见^(?:\d+|\d{1,3}(?:[.,]\d{3})*)(?:[,.]\d+)?$
  • 非常感谢 - 这个模式正是我想要的

标签: c# asp.net regex format


【解决方案1】:

你不需要转义逗号,,但你必须转义点.,否则它将匹配每个字符,如.*,它匹配所有内容。

[ 方括号] 匹配给定类中的任何字符,其中包含点.、逗号, 和数字。

如果你想更严格并有三胞胎之类的你必须这样做:

  thousands v          v literal comma
^\d{1,3}(?:\.\d{3})*(?:,\d*)?$
         ^           ^ non-capturing-groups

这仍将匹配带有前导零 0 的格式错误的数字,例如:

00
01
003.999,99

还有一种非常简单的方法可以排除这些。我把它留给你作为家庭作业:) 提示:[1-9]


编辑:只接受 1 1,11 1.111 1.111,11 1111,11

这个正则表达式应该是:

^1+(?:\.111)*(?:,11)?$

对于某些极端情况可能会有所不同,但基本上就是这样。

【讨论】:

  • 感谢您的帮助和耐心等待!
  • 验证是否有办法接受这些输入:1 1,11 1.111 1.111,11 1111,11
  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多