bootstrapvalidator里面验证ID的坑

2017-12-19  本文已影响475人  小陈陈酱

bootstrapvalidator(以下简称BV)是一个前端表单验证框架,之前项目用到了,我这篇文章所想记录的是我在用BV的时候踩到的一个小坑。
有一个需求是:验证身份证号码是否合法(暂不需要和DB里的身份证做对比,只验证格式)
我想这么简单的需求应该很好实现吧!
于是乎我就写成了这样:
html如下:

<div class="form-group">
        <input id="id-card-input" type="text" placeholder="请输入身份证号码" name="idCard" class="form-control" maxlength="18"
               required>
      </div>

js如下:

idCard: {
        message: '身份证输入错误,请重新输入',
        validators: {
          notEmpty: {
            message: '此项必填哦'
          },
          id: {
            country:'CN',
            message: '身份证输入错误,请重新输入',
          }
        }
      }

然后去测试,咦~~为啥报错了?我一共测试了5个人的身份证号码,失败了4个。也就是说只验证到一个人的身份证是合法的。所以这样的写法不可取。


我自己的身份证.png

百度了一下,已经有人说了,这个框架没有办法正确验证中国人的ID card.
于是我又想到用正则来验证,不用他提供的id验证的方法。
js如下

 regexp: {
            regexp:'/(^\d{15}$)|(^\d{17}([0-9]|X)$)/',
            message: '身份证输入错误,请重新输入'
          }

然后还是报错,啥都不能验证了。这是为啥?难道是我写错了吗?换了几个写法也不对,不晓得。我正准备换一个写法,单独写一个function来处理这里的时候,我想了想,不应该啊!为何这么简单的一个需求BV实现不了呢?
于是乎我又试了一下h5的写法,把正则表达式写在h5里面。

<div class="form-group">
        <input id="id-card-input" type="text" placeholder="请输入身份证号码" name="idCard" class="form-control" maxlength="18"
               pattern="(^\d{15}$)|(^\d{17}([0-9]|X)$)" required>
      </div>

and then,test says successful!
可以正确验证身份证号码。
目的达到了。但是为何写在js里不行,html里面就可以的原因,我还是不晓得。
如果有看官明了的话,求指教。
(以上纯粹个人浅显踩坑经验,希望对你有用。如果有需要校正的地方,欢迎大方提出。☺)

上一篇下一篇

猜你喜欢

热点阅读