【问题标题】:ASP TextBox support for decimal numbers with a . (dot)ASP TextBox 支持带有 . (点)
【发布时间】:2018-07-12 09:58:00
【问题描述】:

我有一个 ASP 页面,该页面中有一个文本框。此 TextBox 的类型为 Double,后端代码中的类型为 Decimal。

这是文本框。

            <asp:TableCell>
                <asp:TextBox ID="txtPremium" runat="server" Width="90px"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvPremium" runat="server" ControlToValidate="txtPremium"
                    ErrorMessage="Required" ForeColor="Red" Display="Dynamic" ValidationGroup="Insert"></asp:RequiredFieldValidator>
                <asp:CompareValidator ID="txtPremium_Integer" runat="server" ValidationGroup="Insert"
                    ControlToValidate="txtPremium" Display="Dynamic" ErrorMessage="'Premium' must be decimal"
                    ForeColor="Red" Operator="DataTypeCheck" SetFocusOnError="true" Type="Double" />
            </asp:TableCell>

在 UI 中,当我尝试将值添加到该文本框中时,例如 10.0(带点),文本框错误消息会出现。当我尝试输入像 10,0 (with a comma) 这样的值时,它被接受了。我需要能够输入一个点。

我尝试将文本框的类型更改为货币,但出现同样的错误。文本框的类型列表中没有其他相关类型可用。

为了完整起见,这里是我后面代码中文本框的声明。

Dim _premium As Decimal = Decimal.Parse(txtPremium.Text)

我不确定如何让文本框接受点。

有什么想法吗?

【问题讨论】:

  • 您的 PC/ASP 主机的语言/区域设置是否使用欧洲数字格式,将 , 视为数字和小数之间的分隔符,而不是 .
  • 哦,我不知道我使用的是客户计算机。我该如何检查?
  • 您可以创建自己的CustomValidator 来检查逗号和点是否都是正确输入的十进制数:€ 1,95$ 1.95。 @ValentinSky,它不是重复的,因为 OP 正在询问验证控制。
  • 我已经更新了代码。

标签: asp.net vb.net textbox decimal-point


【解决方案1】:

Hi compare 验证器用于比较两个字段之间的值,例如密码和匹配密码

如果您想验证十进制,请使用正则表达式验证器和接受十进制的表达式。将以下表达式中的 2 替换为允许的最大十进制值 ^\d+.\d{0,2}

    <asp:RegularExpressionValidator runat="server" ErrorMessage="Decimal Only" ID="txtregpre" ValidationGroup="Insert"
                       ControlToValidate="txtPremium"              
ValidationExpression="^\d+\.\d{0,2}$"></asp:RegularExpressionValidator>

【讨论】:

  • 如果要允许昏迷表达式会改变
  • 用这个作为逗号 ^[1-9][\.\d]*(,\d+)?$
  • 我明天试试然后回来。谢谢。
  • 它有效。只是一些澄清。你能具体解释一下这是什么意思吗? "^\d+\.\d{0,2}$"
  • 它是十进制 d{0,2} 的正则表达式 d 表示十进制到 2 位,例如 1.12 用于进一步阅读检查 en.wikipedia.org/wiki/Regular_expression 以及用于在 vb 中进行深入常规排泄检查 tutorialspoint.com/vb.net/vb.net_regular_expressions.htm (可能是矫枉过正)只要记住你的文本将根据正则表达式进行验证,如果其有效没有错误,你可以验证字符串中的所有模式,如电子邮件、带有特定逗号和小数点的十进制字符串、特定格式的日期等
【解决方案2】:

您可以使用正则表达式而不是比较验证,这是适用于 10.0 和 10,0 的示例

   <asp:TableCell>
        <asp:TextBox ID="txtPremium" runat="server" Width="90px"></asp:TextBox>
        <asp:RequiredFieldValidator ID="rfvPremium" runat="server" ControlToValidate="txtPremium"
            ErrorMessage="Required" ForeColor="Red" Display="Dynamic" ValidationGroup="Insert"></asp:RequiredFieldValidator>
        <!-- Your Regular Expression Validator -->
        <asp:RegularExpressionValidator ID="txtPremium_Integer"
            ControlToValidate="txtPremium" ValidationGroup="Insert" ForeColor="Red"
            runat="server" Display="Dynamic"
            ErrorMessage="'Premium' must be decimal"
            ValidationExpression="^\d+([,\.]\d{1,2})?$">
        </asp:RegularExpressionValidator>
    </asp:TableCell>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2013-05-22
    • 2011-03-24
    • 2011-09-24
    相关资源
    最近更新 更多