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