ZK onKeyUp 与正则表达式

发布于 2024-12-21 18:31:05 字数 400 浏览 1 评论 0原文

我试图使 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} 如何在我的函数中实现此正则表达式检查?

I am trying to make zk textbox behave like only numeric values . For this above code works great

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

But also I need to check that if first value starts whit 0 or 5 or .. to do this I am trying to make regular expression but no success. My regex ^5[0-9]{8} How can I implement this regex chek to my function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逆夏时光 2024-12-28 18:31:05

我认为这不是正则表达式的问题,
你可以看看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/

I think that's not the issue for regex,
you could take a look in InputWidget , where implements the 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;
    }
},

And you will find it's only detecting for one char.

Since it's not match the whole word, (it's bad performance and useless in general case)
so there's alternate for not using regex in your case.

<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>

You could test the code on the ZK Fiddle platform.

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

If you really want to use regex for input mask ,
it's not impossible , you could do the steps below.

1.Get the old value

2.Try to add the new char to the value (Have to ignore the case for some special keycode as shallIgnore did)

3.use the full text do the regex , if not matching , stop the event and return false in the onKeyPress.

But in your use-case , I think the sample is good enough.


You could still have another choose , for using jquery mask plugin, ZK could works well with most jQuery plugin.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文