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})?$/
そして今、それはうまくいきました、ありがとう!