bootstrapvalidator(以下簡稱BV)是一個(gè)前端表單驗(yàn)證框架灵份,之前項(xiàng)目用到了,我這篇文章所想記錄的是我在用BV的時(shí)候踩到的一個(gè)小坑逸绎。
有一個(gè)需求是:驗(yàn)證身份證號(hào)碼是否合法(暫不需要和DB里的身份證做對比欠雌,只驗(yàn)證格式)
我想這么簡單的需求應(yīng)該很好實(shí)現(xiàn)吧咨察!
于是乎我就寫成了這樣:
html如下:
<div class="form-group">
<input id="id-card-input" type="text" placeholder="請輸入身份證號(hào)碼" name="idCard" class="form-control" maxlength="18"
required>
</div>
js如下:
idCard: {
message: '身份證輸入錯(cuò)誤,請重新輸入',
validators: {
notEmpty: {
message: '此項(xiàng)必填哦'
},
id: {
country:'CN',
message: '身份證輸入錯(cuò)誤沛硅,請重新輸入',
}
}
}
然后去測試眼刃,咦~~為啥報(bào)錯(cuò)了?我一共測試了5個(gè)人的身份證號(hào)碼摇肌,失敗了4個(gè)擂红。也就是說只驗(yàn)證到一個(gè)人的身份證是合法的。所以這樣的寫法不可取围小。
百度了一下昵骤,已經(jīng)有人說了,這個(gè)框架沒有辦法正確驗(yàn)證中國人的ID card.
于是我又想到用正則來驗(yàn)證肯适,不用他提供的id驗(yàn)證的方法变秦。
js如下
regexp: {
regexp:'/(^\d{15}$)|(^\d{17}([0-9]|X)$)/',
message: '身份證輸入錯(cuò)誤,請重新輸入'
}
然后還是報(bào)錯(cuò)疹娶,啥都不能驗(yàn)證了伴栓。這是為啥?難道是我寫錯(cuò)了嗎雨饺?換了幾個(gè)寫法也不對钳垮,不曉得。我正準(zhǔn)備換一個(gè)寫法额港,單獨(dú)寫一個(gè)function來處理這里的時(shí)候饺窿,我想了想,不應(yīng)該耙普丁肚医!為何這么簡單的一個(gè)需求BV實(shí)現(xiàn)不了呢?
于是乎我又試了一下h5的寫法向瓷,把正則表達(dá)式寫在h5里面肠套。
<div class="form-group">
<input id="id-card-input" type="text" placeholder="請輸入身份證號(hào)碼" name="idCard" class="form-control" maxlength="18"
pattern="(^\d{15}$)|(^\d{17}([0-9]|X)$)" required>
</div>
and then,test says successful!
可以正確驗(yàn)證身份證號(hào)碼猖任。
目的達(dá)到了你稚。但是為何寫在js里不行,html里面就可以的原因,我還是不曉得刁赖。
如果有看官明了的話搁痛,求指教。
(以上純粹個(gè)人淺顯踩坑經(jīng)驗(yàn)宇弛,希望對你有用鸡典。如果有需要校正的地方,歡迎大方提出枪芒。?)