今天收到邮件,说甲方的运维人员通过我们的门户系统导入一批数据,但有个别号码在下一个运行模块中出现异常,查原因是甲方导入的数据中,个别手机号码字段后存在不可见换行符。检查导入模块的代码,有做校验,逻辑大概如下(java):
Pattern msisdn = Pattern . compile("^((13[0-9])|(15[0-9])|(18[0-9]))\\d{8}$"); if (a == null || "".equals(a)) { System. out.println( "移动号码不能为空;<br/>" ); } else if (!msisdn.matcher(a).find()) { System. out.println( "无效的移动号码;<br/>" ); } else { System. out.println( "号码正确"); }
直觉我也觉得它能仅匹配出11位数字字符,但经过实验发现,它居然忽视了换行符(有和没有,都一样)。
这个情况在perl中也存在,查了一下资料,如果要匹配换行符,需要加特别标识,如perl中如何要用 ‘.’ 匹配换行符,需要使用/m /s , 也就是说,它默认就忽略换行符。