4

有没有办法让 ASP.NET 文本框只接受货币值,并且在验证控件时,预先插入 $ 符号?

例子:

10.23 变为 10.23
美元 1.45 美元保持 1.45 美元
10.a 由于不是有效数字而引发错误

我有一个正则表达式验证器,它正在验证数字是否有效,但我不知道如何将 $ 符号强制输入文本。我怀疑 JavaScript 可能会工作,但想知道是否有另一种方法可以做到这一点。

4

6 回答 6

10

AJAX 控件工具包中的 ASP.NET MaskedEdit控件可以完成您的要求。

于 2008-10-14T17:30:23.883 回答
5

我知道答案已被接受,但我想为遇到相同问题并寻找多种解决方法的人提供另一种解决方案。

我这样做的方法是使用 jQuery格式货币插件在客户端绑定用户输入。在服务器端解析这个输入只需要:

// directive
using System.Globalization;

// code
decimal input = -1;
if (decimal.TryParse(txtUserInput.Text, NumberStyles.Currency, 
    CultureInfo.InvariantCulture, out input))
{
    parameter = input.ToString();
}

唯一的缺点是用户可以关闭 javascript,在这种情况下,运行服务器端的 RegEx 验证器将作为后备。如果控件是数据绑定的,那么您所要做的就是decimalValue.ToString("{0:c}"),正如其他人所提到的,为了显示正确的货币格式。

很酷的一点是,如果用户输入文本框并显示$0.00在客户端,服务器端的 if 语句将返回 false。如果您的十进制值在数据库中不可为空,只需更改decimal input = -1decimal input = 0,您将获得默认值 0。

于 2009-12-28T13:56:47.250 回答
4

另一种方法可能是将美元符号放在文本框的左侧。是否真的需要在盒子内放置美元符号或一个简单的标签?

于 2008-10-14T17:27:42.953 回答
2
decimal sValue = decimal.Parse(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", sValue); }
else
{ string LableText = Convert.ToString(sValue); }
于 2009-12-28T05:58:29.650 回答
1
string sValue = Convert.ToString(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", "sValue"); }
else
{ string LableText = Convert.ToString(sValue); }
于 2008-11-03T10:56:07.607 回答
0

在 .CS 中,您可以按照以下方式进行模式匹配,

string value = text_box_to_validate.Text;

string myPattern = @"^\$(\d{1,3},?(\d{3},?)*\d{3}(\.\d{0,2})|\d{1,3}(\.\d{2})|\.\d{2})$";
Regex r = new Regex(myPattern);
Match m = r.Match(value);

if (m.Success)
{
    //do something -- everything passed
}
else
{
    //did not match
    //could check if number is good, but is just missing $ in front
}
于 2008-10-14T17:45:53.337 回答