1

请帮助我,我已经被困在这些问题上几天了。我有一个 web 表单,可以在 asp.net 中付款,语言是 C#。

文本框用于接受用户的货币金额。我的要求是,如果用户输入例如 75,在 _TextChanged 事件上它将切换到 75.00。我让这部分工作。但是我的代码不检查 . 位置之后的三个字符。并删除多余的零。我的问题: 1. 如果输入的长度超过小数点后两位数,如何删除多余的零?2. 如果用户没有在文本框中输入任何数字怎么办?我已经尝试过了,但我只是得到了错误,或者它弄乱了整个代码。

protected void txtAmount_TextChanged(object sender, EventArgs e)
{

        string textBoxData = txtAmount.Text;

        int textLength = textBoxData.Length;

        int position = txtAmountToPay.Text.IndexOf("."); //Position is the decimal

        if (position == -1)
        {
            textBoxData = textBoxData + ".50"; // when you enter 75 you get 75.50
        }
        if (position == textLength -2 )
        {
            textBoxData = textBoxData + "4"; // when you enter 75.0 you get 75.04
        }
        if (position == textLength -1)
        {
            textBoxData = textBoxData + "30"; // when you enter 75. you get 75.30
        }
        if (position >= textLength - 3) // This part does not work
        {
            textBoxData == textBoxData.Replace(-3);// if user enters 75.0000 it will remove all the other digits after the two 0s after the decimal point
        }


    txtAmount.Text = textBoxData.ToString();
 }
4

2 回答 2

5

另一个答案是用于服务器端验证。我认为如果您为此使用客户端验证,它会更加优化。即使没有回发,它也会验证输入。尝试查看此示例:

<asp:TextBox id="TextBox1" runat="server" />
<asp:RequiredFieldValidator id="RVF1" runat="server" ControlToValidate="TextBox1"
   ErrorMessage="Required" Display="Dynamic" />
<asp:CompareValidator id="CheckFormat1" runat="server" ControlToValidate="TextBox1" Operator="DataTypeCheck"
   Type="Currency"  Display="Dynamic" ErrorMessage="Illegal format for currency" />
<asp:RangeValidator id="RangeCheck1" runat="server" ControlToValidate="TextBox1"
   Type="Currency" Minimum="1" Maximum="999.99" ErrorMessage="Out of range" Display="Dynamic" />

这将验证您的文本输入。

  • 第一个:asp:RequiredFieldValidator检查输入是否为空或为空;

  • 第二:asp:CompareValidator检查输入是否为货币格式;

  • 第三:asp:RangeValidator是验证您的值的范围。(适合价值天花板和地板)

这是一个简单的DEMO。

于 2013-08-02T01:54:41.993 回答
3

尝试使用正则表达式并查找 XX.XX 的模式,如果输入错误,则用户必须修复输入。

private void button1_Click(object sender, EventArgs e)
{
    var pattern = @"^[0-9]*(\.[0-9]{1,2})?$";
    if(Regex.IsMatch(textBox1.Text, pattern))
        MessageBox.Show("Correct Input.");
    else
        MessageBox.Show("Wrong Input!");
}

正则表达式

于 2013-08-02T00:49:16.513 回答