如何使用正则表达式验证Javascript中的数字

时间:2014-11-02 06:40:58

标签: javascript asp.net regex

/ ^ [0-9] \ S [0-9] / [0-9] $ | ^ [0-9] / [0-9] $ | ^ [0-9] $ | ^ [0 -9],[0-9] $ | ^ [0-9]。[0-9] $ / .test(“1 1”)给出为真。为什么?我只想跟随类型的字符串返回上面的检查: “1 1/2”,“1/2”,“1,2”,“1.2”,“1”

另外,我需要允许½字符。它不是3个字符,而是1.它可以在瑞典语键盘中使用。

另外,我在asp.net文本框的onchange事件中检查这个。如果它返回false,我不希望页面回发并调用textbox的textchanged事件的事件处理程序。为此,我使用了event.preventDefault()但它不起作用。下面是文本框的标记。

<asp:TextBox ID="gvtxtQty" CssClass="qty_input" runat="server" BackColor="#f4f6f7" Width="100px"
                                                                                    Text='<%# Eval("Qty")%>' OnTextChanged="gvtxtQty_TextChanged"></asp:TextBox>

我在下面注册文本框的更改事件。

$(".qty_input").change(function (e) { fnVerifyQuantity(e, this) });

函数fnVerifyQuantity如下:

function fnVerifyQuantity(e,o) {
        var bol = /^[0-9]\s[0-9]\/[0-9]$|^[0-9]\/[0-9]$|^[0-9]$|^[0-9],[0-9]$|^[0-9].[0-9]$/;
        //var bol = /[0-9]\s[0-9]\/[0-9]/;
        var tf = bol.test(o.value);
if(tf=="false") e.preventDefault();

请帮忙。

1 个答案:

答案 0 :(得分:0)

1 /你的第一个regepx返回true,因为你忘了逃避最后一部分:^ [0-9]。[0-9] $应该是^ [0-9]。[0-9] $

2 /对于½字符,你的unicode无法可靠地使用regexp来匹配它,我建议你首先“规范化”你的值,然后使用更简单的正则表达式。

3 /你的上一次测试有误,“tf”变量是一个布尔值,所以你不应该将它与一个字符串进行比较,你的测试应该是“if(!tf)”或“if(false == tf)“

以下是您应该使用的最后一段代码的修改版本:

function fnVerifyQuantity(e,o) {
    var str = o.value.trim().replace("½", ".5").replace("1/2", ".5").replace(" ", ".").replace(/[,.]+/, ".").replace(/^\./, "0.");
    console.log("Aligned string: " + str);
    if( !/^[0-9](\.[0-9])?$/.test(str) ) {
        console.log("not conform");
        e.preventDefault();
    }
    else {
        console.log("conform");
    }
}