2011-03-10 75 views
2

我正在寻找验证文本框。该文本框用于使用户可以输入客户的付费率。例如。 8.40,10.50,24.80。我想验证它,并且我已经读过使用正则表达式来更快更简单的方法。问题是我仍然不熟悉括号内字符的使用方式。任何帮助是极大的赞赏。谢谢!C#:使用正则表达式验证文本框

+0

只是好奇,但你在那里读了正则表达式会更快? – 2011-03-10 00:27:50

+0

我猜测代码更快或更短。 – jquirante 2011-03-10 00:37:17

回答

0
using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Reflection; 

public class MainClass{ 

    public static void Main(){ 
     Regex moneyR = new Regex(@"\$(((\d{1,3},)+\d{3})|\d+)\.\d{2}"); 
     string[] money = new string[] { "$0.99", 
             "$1099999.00", 
             "$10.25", 
             "$90,999.99", 
             "$1,990,999.99", 
             "$1,999999.99" }; 
     foreach (string m in money){ 
      Console.WriteLine(m); 
      Console.WriteLine(moneyR.IsMatch(m)); 
     } 
    } 
} 
  • $ 0.99真
  • 真$ 1099999.00
  • 真$ 10.25
  • 真$ 90,999.99
  • 假$ 1,990999.99
+0

你能解释Regex括号内的字符吗?我不明白为什么1,990,999.99美元是错误的。 – jquirante 2011-03-10 00:11:09

+1

\ $匹配美元符号。 \ d +匹配1个或多个数字。 \。匹配一个时期。 \ d {2}恰好匹配两个十进制字符。然而,上面的正则表达式不允许使用逗号,所以我没有看到最后三个字符串中的任何一个会如何通过。 – mikesigs 2011-03-10 00:15:47

+0

哦,好的。我现在开始明白了。所以要测试这些字符是否通过,我只需要使用moneyR.IsMatch(txtbox.text); ?那会返回真或假? – jquirante 2011-03-10 00:21:14

4

嗯,我能问究竟是什么构成的几个问题有效的输入。但这里的另一种方法:

一个或多个数字 - 或者 - 一个或多个数字后跟一个小数点和一个或两个数字:

double dbl; 

if (!double.TryParse(Text1.Text, out dbl)) 
    MessageBox.Show("Invalid value entered!"); 
+0

对不起。该文本框是为了一个人的薪酬。所以任何整数例如。 10,15或具有两位小数的任何数字,例如, 14.55,16.65。我的第一个想法是检查用户输入的字符是否都是数字。但是,我也必须接受任何“。”输入的字符。 – jquirante 2011-03-10 00:15:45

+0

这是一个更好的解决方案,因为您不需要考虑文化(即en-CA = $ 20.00,en-FR = 20,00 $) – mikesigs 2011-03-10 00:20:37

+2

虽然结果相同,但我会在处理金钱时建议使用'decimal'而不是'double'。 – 2011-03-10 00:21:54

0
<asp:TextBox ID="txtPayRate" runat="server" /> 
<asp:RegularExpressionValidator 
    ID="revPayRate" 
    ControlToValidate="txtPayRate" 
    ValidationExpression="\d+(\.\d{1,2})?" 
    ErrorMessage="Message to display in ValidationSummary control" 
    Text="Message to display in control" 
    runat="server" > 
</asp: RegularExpressionValidator> 

正则表达式可以如下翻译。

\ d +任何数字,一个或多个重复

(\ d {1,2})?一个编号的捕获组,零个或一个重复。细分如下:

\。文字。

\ d {1,2}任何位,1和2重复

之间

这将只用于英语的货币的工作,虽然。以下是一些通过/失败的例子。

  • 10.00 PASS
  • 1.00 PASS
  • 1.1 PASS
  • 1 PASS
  • 1. FAIL
  • 10,00 FAIL
+0

我强烈建议你下载一个名为Expresso的工具。它非常强大而完整的版本是免费的。我一直在使用它多年。 http://www.ultrapico.com/Expresso.htm – mikesigs 2011-03-10 00:58:34