2

ASPxGridViewコントロール(DevExpressコンポーネント)内にあるテキストボックスからの入力を検証するためにJavaScriptを使用しています。

私はこの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です。小数点以下2桁のみ、小数点以下3桁まで許可する必要があります。例:「123,12」、「45,32」、「7,65」、「9,6」、「85,32」、「94,1」、「310、 2"。次の文字列を許可したくありません: "1,123"、 "125,789"、 "1234,2"

どうすればそれができるかについてのアイデアはありますか?

ありがとうございました!

編集:

私はあなたたちがこれを好きになるように私に言った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);

これは、小数点以下3桁までの任意の数と一致します。オプションで、小数点以下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 に答える