风歌的blog

已搬家到 blog.imxjf.top
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一个换行符引发的问题

Posted on 2013-08-12 20:43  风歌  阅读(441)  评论(0编辑  收藏  举报

     今天收到邮件,说甲方的运维人员通过我们的门户系统导入一批数据,但有个别号码在下一个运行模块中出现异常,查原因是甲方导入的数据中,个别手机号码字段后存在不可见换行符。检查导入模块的代码,有做校验,逻辑大概如下(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 , 也就是说,它默认就忽略换行符。