1

zk textbox を数値のみのように動作させようとしています。このため、上記のコードはうまく機能します

<textbox id="telNo" xmlns:w="client" >
<attribute w:name="doKeyPress_">
  function(evt){
       if (!this._shallIgnore(evt, "0123456789"))
          this.$doKeyPress_(evt);
  }
</attribute>

しかし、最初の値が 0 または 5 または .. で始まるかどうかを確認する必要もあります。これを行うには、正規表現を作成しようとしていますが、成功しません。私の正規表現^5[0-9]{8}この正規表現チェックを関数に実装するにはどうすればよいですか?

4

1 に答える 1

2

それは正規表現の問題ではないと思います.shallIgnoreを実装している InputWidget を見てください。

https://github.com/zkoss/zk/blob/master/zul/src/archive/web/js/zul/inp/InputWidget.js

_shallIgnore: function (evt, keys) {
    var code = (zk.ie||zk.opera) ? evt.keyCode : evt.charCode;
    if (!evt.altKey && !evt.ctrlKey && _keyIgnorable(code)
    && keys.indexOf(String.fromCharCode(code)) < 0) {
        evt.stop();
        return true;
    }
},

そして、1文字しか検出していないことがわかります。

単語全体と一致しないため(パフォーマンスが悪く、一般的には役に立たない)、正規表現を使用しないという代替手段があります。

<textbox id="telNo" xmlns:w="client" >
  <attribute w:name="doKeyPress_">
    function(evt){
         if(this.getValue().length > 0 ){
           if (!this._shallIgnore(evt, "0123456789"))
              this.$doKeyPress_(evt);
         }else{
           if (!this._shallIgnore(evt, "05"))
              this.$doKeyPress_(evt);
         }
    }
  </attribute>
</textbox>

ZK Fiddle プラットフォームでコードをテストできます。

http://zkfiddle.org/sample/1b3nlr0/1-Textbox-input-restriction-sample

本当に正規表現を入力マスクに使用したい場合は、不可能ではありません。以下の手順を実行できます。

1.古い値を取得する

2.新しい文字を値に追加してみてください(無視する必要があるため、特別なキーコードのケースを無視する必要があります)

3.全文を使用して正規表現を実行し、一致しない場合はイベントを停止し、onKeyPressでfalseを返します。

しかし、あなたのユースケースでは、サンプルで十分だと思います。


jquery マスク プラグインを使用する場合、ZK はほとんどの jQuery プラグインでうまく動作します。

http://www.meiocodigo.com/projects/meiomask/

于 2011-12-20T02:14:14.767 に答える