正则表达式 - 只有数字,点,逗号和第一个字符应为$

时间:2011-09-28 08:27:32

标签: c# asp.net regex

我想为以下表达式设置正则表达式

$123,456,789
$1.23
$123

到目前为止我所做的是,如果使用输入123456789,我会将其转换为美元格式,如下所示$123,456,789.00

但如果他进入文本框,我想验证上述值。我想只允许.使用数值。 $符号将在我转换后出现但在离开时我想根据要求验证文本框是否有任何想法

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

试试这个:

^\$\d{1,3}(,\d{1,3})*(\.\d+)?$

答案 2 :(得分:1)

我的建议(未经测试):

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

我们需要一美元,然后是最多3位数。

然后可能会出现更准确的3位数长组。

最后可能有一个逗号,后跟至少一位数(或没有逗号,没有数字)

答案 3 :(得分:1)

试试这个

^\$?\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$

here online on Regexr

一开始的$是可选的。 1到3位数字,然后可以是由逗号分隔的3位数组,最后是可选的1位或2位数。

重要的是它们确保锚^$,完整的字符串匹配,而不仅仅是字符串的一部分。

修正错误:同样重要的是,.需要进行转义,才能按照字面意思进行匹配,我将其添加到我的正则表达式中。

<强>扩展

如果,不是强制性的,您也需要例如1000有效,我在我的正则表达式中添加了一个替代:

^\$?(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d{1,2})?$

here online on Regexr

答案 4 :(得分:1)

为什么不使用通用方法进行格式化并使用适当的IFormatProvider?不知道为什么你在这里需要正则表达式...

    public static string GetFormattedCurrency(decimal value)
    {
        var formatInfo = new NumberFormatInfo
                            {
                                CurrencyDecimalSeparator = ".",
                                CurrencyGroupSeparator = ",",
                                CurrencyGroupSizes = new[] { 3 },
                                CurrencySymbol = "$"
                            };

        return value.ToString("C", formatInfo);
    }

答案 5 :(得分:0)

这个怎么样

[$]?(?:\d\,?){0,}(?:\.\d*)?