如何实现字段支持固定电话格式和手机号格式原创
金蝶云社区-技术支持与赋能部_ZH
技术支持与赋能部_ZH
2人赞赏了该文章 1,381次浏览 未经作者许可,禁止转载编辑于2022年11月08日 19:27:30

关键词:固定电话,手机号,模型扩展

一、需求

标准产品的手机号字段不支持固定电话格式的录入。需要录入固定电话号码格式的要求非常常见,需要开发一个字段既能支持手机号又能支持固定号码

二、思路与方案

2.1分析思路

难点是固定电话格式包含特殊字符,提示信息要显示在字段上

2.2实现方案

找到固定电话号码的规律,设置正则

可以通过模型扩展可视化工具创建全局电话号码控件,也可以给业务表单个性化添加控件

因为模型扩展可视化工具已经有比较完善的使用指南,大家只需要替换校验规则即可

https://developer.kingdee.com/article/322092495129566976?productLineId=29&isKnowledge=2

本文主要讲如何个性化给业务单据添加控件,毕竟不同的单据也存在规则需求不一样的场景。

三、实现过程

1、创建普通文本字段

image.png

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);//取消保存操作
			}
			
		}
		
	}

四、效果图

image.png

image.png

五、开发环境版本

V5.0.002

六、注意事项

1、网上找到的正则表达式不一定准确,很多电话号码的规则已经改变了,需要自己重新改成最新的规则校验

2、校验需要在保存和值改变事件同时处理

七、参考资料

开发平台

学习成长中心

模型可视化工具

八、源代码


赞 2