我试图让 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} 如何在我的函数中实现此正则表达式检查?
最佳答案
我认为这不是正则表达式的问题, 你可以看看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 插件配合良好。
关于java - ZK onKeyUp 与正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8540832/