ZK onKeyUp с регулярным выражением - PullRequest
1 голос
/ 17 декабря 2011

Я пытаюсь заставить текстовое поле 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} Как я могу внедрить этот шаблон проверки в свою функцию?

1 Ответ

2 голосов
/ 20 декабря 2011

Я думаю, что это не проблема для регулярных выражений, вы можете взглянуть на InputWidget, где реализует willIgnore.

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. Попытаться добавить новый символ к значению (необходимо игнорировать регистр для некоторого специального кода ключа, как делалIgnore)

3.Используйте полный текст, сделайте регулярное выражение, если оно не совпадает, остановите событие и верните false в onKeyPress.

Но в вашем случае использования, я думаю, образец достаточно хорош.


Вы можете выбрать другой вариант, для использования плагина jquery mask, ZK может хорошо работать с большинством плагинов jQuery.

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

...