それは正規表現の問題ではないと思います.shallIgnoreを実装している InputWidget を見てください。
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;
}
},
そして、1文字しか検出していないことがわかります。
単語全体と一致しないため(パフォーマンスが悪く、一般的には役に立たない)、正規表現を使用しないという代替手段があります。
<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.新しい文字を値に追加してみてください(無視する必要があるため、特別なキーコードのケースを無視する必要があります)
3.全文を使用して正規表現を実行し、一致しない場合はイベントを停止し、onKeyPressでfalseを返します。
しかし、あなたのユースケースでは、サンプルで十分だと思います。
jquery マスク プラグインを使用する場合、ZK はほとんどの jQuery プラグインでうまく動作します。
http://www.meiocodigo.com/projects/meiomask/