1

我试图让 zk 文本框的行为只像数值。对于上面的代码,效果很好

<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

我认为这不是正则表达式的问题,您可以查看 InputWidget ,其中实现了shallIgnore。

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;
    }
},

你会发现它只检测一个字符。

由于它与整个单词不匹配,(它的性能很差并且在一般情况下无用)因此在您的情况下可以不使用正则表达式。

<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.尝试将新字符添加到值中(必须忽略某些特殊键码的大小写,就像shallIgnore所做的那样)

3.使用全文做正则表达式,如果不匹配,停止事件并在onKeyPress中返回false。

但在你的用例中,我认为样本已经足够好了。


您仍然可以有其他选择,因为使用 jquery mask 插件,ZK 可以与大多数 jQuery 插件配合使用。

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

于 2011-12-20T02:14:14.767 回答