【问题标题】:Regex on JavaScript to accept only numbers with 2 decimalsJavaScript 上的正则表达式只接受带 2 位小数的数字
【发布时间】:2014-10-08 15:00:28
【问题描述】:

我正在尝试在 JavaScript + ASP.NET Web 表单中执行正则表达式,以验证 TextBox 仅接受十进制正数,最多 18 位和 2 位小数。

                <script type="text/javascript">
                    $(document).ready(function (e) {
                        $("#<%=txtQtt.ClientID%>").bind('keypress', function (event) {
                            var regex = new RegExp("^[0-9]{1,18}(?:\.[0-9]{0,2})?$");
                            var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
                            if (!regex.test(key)) {
                                event.preventDefault();
                                return false;
                            }
                        });
                    });
                </script>
                <span class="label100">Quantity:</span>
                <asp:TextBox ID="txtQtt" runat="server" CssClass="txt200" MaxLength="20"></asp:TextBox>

代码“有效”(它只接受数字),但不允许我输入点,我希望他只接受只接受一个点。

我做错了什么?

【问题讨论】:

    标签: javascript c# asp.net regex


    【解决方案1】:

    你需要在RegExp对象中使用\\.

    var regex = new RegExp("^[0-9]{1,18}(?:\\.[0-9]{1,2})?$");
    

    否则你可以使用正则表达式:

    var regex = /^[0-9]{1,18}(?:\.[0-9]{1,2})?$/
    

    最好在小数点后使用[0-9]{1,2} 而不是[0-9]{0,2},否则它也会允许123. 作为有效数字,

    【讨论】:

    • 奇怪,仍然不让我输入一个点。 =(
    • 你能提供一个关于 jsfiddle 重现这个问题的演示链接吗?
    • 在表单中:http://jsfiddle.net/nbcqnvsa/,但现在根本无法工作。帮助! :P
    • 你的正则表达式谎言必须是:var regex = new RegExp("^[0-9]{1,18}(?:\\.[0-9]{0,2})?$"); 在演示代码中。
    • http://jsfiddle.net/nbcqnvsa/1/ 仍然没有,我什至在 FF、Chrome 和 IE 上都试过了。有可能 JsFiddle 不能在这里工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多