如何实现字段支持固定电话格式和手机号格式原创
2人赞赏了该文章
1,381次浏览
编辑于2022年11月08日 19:27:30
关键词:固定电话,手机号,模型扩展
一、需求
标准产品的手机号字段不支持固定电话格式的录入。需要录入固定电话号码格式的要求非常常见,需要开发一个字段既能支持手机号又能支持固定号码
二、思路与方案
2.1分析思路
难点是固定电话格式包含特殊字符,提示信息要显示在字段上
2.2实现方案
找到固定电话号码的规律,设置正则
可以通过模型扩展可视化工具创建全局电话号码控件,也可以给业务表单个性化添加控件
因为模型扩展可视化工具已经有比较完善的使用指南,大家只需要替换校验规则即可
https://developer.kingdee.com/article/322092495129566976?productLineId=29&isKnowledge=2
本文主要讲如何个性化给业务单据添加控件,毕竟不同的单据也存在规则需求不一样的场景。
三、实现过程
1、创建普通文本字段
2、在表单插件中,重写propertyChanged方法,监听值改变操作
@Override public void propertyChanged(PropertyChangedArgs e) { // TODO Auto-generated method stub super.propertyChanged(e); IDataEntityProperty obj = e.getProperty(); String key = obj.getName(); if(key.equals("telnum")) {//判断是否是电话号码字段 ChangeData changeSet = e.getChangeSet()[0]; String newValue = (String) changeSet.getNewValue();//拿到改变后的值 if(!isPhone(newValue)&&!isMobile(newValue)) {//判断是否符合电话格式 // 在字段下方弹出提示tips FieldTip tip = new FieldTip(FieldTipType.Info,"telnum","电话号码'"+newValue+"'格式不正确"); this.getView().showFieldTip(tip); } } } /** * 固定电话号码验证 * * @param str * @return 验证通过返回true */ public static boolean isPhone(String str) { Pattern p1 = null, p2 = null; Matcher m = null; boolean b = false; p1 = Pattern.compile("^[0][1-9]{2,3}-[0-9]{5,10}$"); // 验证带区号的 p2 = Pattern.compile("^[1-9]{1}[0-9]{5,8}$"); // 验证没有区号的 if (str.length() > 9) { m = p1.matcher(str); b = m.matches(); } else { m = p2.matcher(str); b = m.matches(); } return b; } /** * 手机号验证 * * @param str * @return 验证通过返回true */ public static boolean isMobile(String str) { Pattern p = null; Matcher m = null; boolean b = false; p = Pattern.compile("^[1][3,4,5,6,8][0-9]{9}$"); // 验证手机号 m = p.matcher(str); b = m.matches(); return b; }
3、单据保存校验
@Override public void beforeItemClick(BeforeItemClickEvent evt) { // TODO Auto-generated method stub super.beforeItemClick(evt); String itemKey = evt.getItemKey(); if(itemKey.equals("bar_save")) { String telnum = (String) this.getModel().getValue("telnum"); if(!isPhone(telnum)&&!isMobile(telnum)) {//判断是否符合电话格式 //弹出提示框提醒格式不正确 this.getView().showMessage("电话号码'"+telnum+"'格式不正确"); evt.setCancel(true);//取消保存操作 } } }
四、效果图
五、开发环境版本
V5.0.002
六、注意事项
1、网上找到的正则表达式不一定准确,很多电话号码的规则已经改变了,需要自己重新改成最新的规则校验
2、校验需要在保存和值改变事件同时处理
七、参考资料
八、源代码
kded_xyf-kded_kfal-20221103111 …(15.86KB)
源码.rar(1.12KB)
推荐阅读