2

我正在使用 javascript 来验证来自 ASPxGridView 控件(DevExpress 组件)内的文本框的输入。

我正在使用这个 javascript 代码来验证它(通过 OnKeyPress 事件):

function CheckKey(s, e) {
    var key = ASPxClientUtils.GetKeyCode(e.htmlEvent);
    var char = String.fromCharCode(key);
    if (e.htmlEvent.shiftKey) {
        if (!IsAvailableChar(char))
            ASPxClientUtils.PreventEvent(e.htmlEvent);
    } else
        if (!(IsAvailableChar(char) || IsAvailableKey(key))) ASPxClientUtils.PreventEvent(e.htmlEvent);

    return;
}

function IsAvailableChar(char) {
    var AvailableChars = "0123456789,";
    return AvailableChars.indexOf(char) != -1;
}

function IsAvailableKey(key) {

    switch (key) {
        case 46: //delete
            return true;
            break;
        case 37: //left arrow
            return true;
            break;
        case 39: //right arrow
            return true;
            break;
        case 16: //shift
            return true;
            break;
        case 188: //comma
            return true;
            break;
        default:
            return false;
            break;
    }

我用它来“阻止”一些字符,它工作正常。但现在我想做一些更复杂的事情:我不希望用户在文本框中输入多个逗号。

比这更复杂一点:这个文本框的最大长度是 6。我希望它只允许两个小数位,并且在小数点前最多三个数字。例如:我希望它允许这些字符串:“123,12”、“45,32”、“7,65”、“9,6”、“85,32”、“94,1”、“310”、 2"。我不希望它允许这些字符串:“1,123”、“125,789”、“1234,2”

关于我如何做到这一点的任何想法?

谢谢!

编辑:

我尝试使用你们告诉我喜欢的两个正则表达式:

function CheckKey(s, e) {
    var key = ASPxClientUtils.GetKeyCode(e.htmlEvent);
    var char = String.fromCharCode(key);

    var text = document.getElementsByName(s.uniqueID)[0].value + char;

    var regEx = new RegExp("/^\d{0,3}(,\d{0,2})?$/");

    if(regEx.test(text))
        return;
    else
        ASPxClientUtils.PreventEvent(e.htmlEvent);

    return;
}

但是,regEx.test(text)即使输入与正则表达式匹配,它也总是返回 false。

另一个编辑:

我在上面的代码中更改了 RegExp 对象的实例化:

var regEx = new RegExp("/^\d{0,3}(,\d{0,2})?$/");

对此:

var regEx = /^\d{0,3}(,\d{0,2})?$/

现在它起作用了,谢谢!

4

2 回答 2

1
/^\d{0,3}(,\d{0,2})?$/.test(textbox.value + char);

这将匹配具有多达三个小数点前位置的任何数字。可选地,它允许小数点和最多 2 个小数位。也匹配空字符串,方便使用。所以这将检查以确保结果框匹配。

正则表达式的解释:

^

字符串的开始

\d{0,3}

0 到 3 位(含)

(...)? 

可选组

,\d{0,2}

逗号后跟 0 到 2 位数字(含)

$

字符串结束。

于 2012-09-17T18:40:08.333 回答
1
var regex_test = /^[1-9][0-9]{0,2},[0-9][0-9]{0,1}$/;
var string = '766,99';

if(regex_test.test(string)){
    console.log('good');
}
于 2012-09-17T18:48:28.367 回答