一、銀行卡號正則校驗
銀行卡號是我們日常生活中經常接觸到的一個數字串,如何驗證銀行卡號的正確性呢?通過正則表達式來實現正則校驗是最直接有效的方法之一。下面是一段實現銀行卡號正則校驗的JavaScript代碼。
/** * 校驗銀行卡號 * @param {string} cardNo 銀行卡號 * @returns {boolean} true為合法,false為不合法 */ function validateCardNo(cardNo) { // 銀行卡號正則表達式 var reg = /^([1-9]{1})(\d{15}|\d{18})$/; return reg.test(cardNo); }
該正則表達式中,^表示匹配字符串的開始,([1-9]{1})表示第一位必須是非零數字,(\d{15}|\d{18})表示后面可以是15位或者18位數字,$表示匹配字符串的結束。如果傳入的銀行卡號符合該正則表達式,則會返回true,否則返回false。
二、銀行卡卡號正確格式
雖然銀行卡號的長度可以是15位或18位,但是不同銀行的銀行卡號格式可能會有所不同。下面列舉幾家銀行的銀行卡號格式。
中國工商銀行(ICBC)的銀行卡號格式為:6222XXXXXXXXXXXXXX或6282XXXXXXXXXXXXXXX。
中國農業銀行(ABC)的銀行卡號格式為:6228XXXXXXXXXXXXXX。
中國銀行(BOC)的銀行卡號格式為:6227XXXXXXXXXXXX或9558XXXXXXXXXXXXXXX。
建設銀行(CCB)的銀行卡號格式為:6227XXXXXXXXXXXX或6217XXXXXXXXXXXX。
三、銀行卡號正則表達式
銀行卡號的正則表達式不是唯一的,我們還可以根據需要自定義正則表達式。下面是一個常用的銀行卡號正則表達式。
// 銀行卡號正則表達式 /^([1-9]{1})(\d{14}|\d{18})$/
該正則表達式與前面提到的正則表達式的區別在于([\d]{14}|[\d]{18})變成了(\d{14}|\d{18}),把中括號變成了小括號。
四、銀行卡號正則驗證
驗證銀行卡號是否符合正則表達式的方法有很多,可以使用JavaScript中的正則表達式對象的test方法,也可以使用字符串的match方法。下面是使用match方法的示例代碼。
/** * 驗證銀行卡號是否符合正則表達式 * @param {string} cardNo 銀行卡號 * @returns {boolean} true為符合,false為不符合 */ function matchCardNo(cardNo) { // 銀行卡號正則表達式 var reg = /^([1-9]{1})(\d{14}|\d{18})$/; return cardNo.match(reg) !== null; }
五、銀行卡號正則匹配
如果需要從一段文本中提取出符合正則表達式的銀行卡號,可以使用正則表達式的exec方法。下面是一個從文本中提取銀行卡號的示例代碼。
/** * 從文本中提取銀行卡號 * @param {string} text 文本 * @returns {Array} 匹配到的銀行卡號數組 */ function extractCardNo(text) { // 銀行卡號正則表達式 var reg = /([1-9])(\d{14}|\d{17})/g; var result = []; var temp = null; while((temp = reg.exec(text)) !== null) { result.push(temp[0]); } return result; }
六、銀行卡號正常是多少位
銀行卡號的長度可以是15位或18位,如果卡號長度不足,會補齊至15位或18位。不同銀行的卡號長度可能不同,可以通過對照前面提到的銀行卡號格式得知,但是一般情況下銀行卡號長度都是16位。
七、銀行卡號正則表達式驗證
為了方便用戶輸入,我們可以在輸入框中實時驗證用戶輸入的銀行卡號是否符合正則表達式。下面是一個實現銀行卡號正則表達式驗證的示例代碼。
/** * 銀行卡號正則表達式驗證 * @param {string} cardNo 銀行卡號 * @param {function} callback 回調函數,驗證結果通過參數true/false返回 */ function validateCardNoByReg(cardNo, callback) { // 銀行卡號正則表達式 var reg = /^([1-9]{1})(\d{14}|\d{18})$/; callback(reg.test(cardNo)); }
八、銀行卡號規則
中國銀行卡行業標準規定,銀行卡號是由發卡行、歸屬地區、分行代碼、個人賬戶四部分組成,具體規律如下:
銀行卡號第1~6位為發卡行標識代碼,中國人民銀行分配發行。中國工商銀行的發卡行標識代碼為:ICBC(6222、6282開頭的卡號)。
銀行卡號第7~9位為歸屬地區標識代碼,具體對應關系如下:
銀行卡號前6位 | 歸屬地區標識代碼 | 城市/省份 |
---|---|---|
6222 | 10 | 北京市 |
6282 | 10 | 北京市 |
6231 | 11 | 天津市 |
6202 | 13 | 上海市 |
6221 | 18 | 河北省 |
6223 | 18 | 河北省 |
銀行卡號第10~12位為分行標識代碼,由銀行自行分配,且一般只有直轄市和省會城市的銀行分行代碼比較多,其余城市銀行分行代碼較少。銀行卡號第13~19位為個人賬戶標識代碼。個人賬戶標識代碼一般由發卡行自行決定,所以不同的銀行卡號個人賬戶標識代碼也可能不同。
九、正則匹配銀行卡號
正則匹配銀行卡號是非常常見的需求,可以使用JavaScript的正則表達式對象的exec方法來實現。下面是一個正則匹配銀行卡號的示例代碼。
/** * 正則匹配銀行卡號 * @param {string} text 文本 * @returns {Array} 匹配到的銀行卡號數組 */ function matchCardNo(text) { // 銀行卡號正則表達式 var reg = /^([1-9]{1})(\d{14}|\d{18})$/g; var result = []; var temp = null; while((temp = reg.exec(text)) !== null) { result.push(temp[0]); } return result; }
十、正則表達式匹配銀行卡號
和正則匹配銀行卡號類似,也可以使用正則表達式來匹配銀行卡號。下面是一個正則表達式匹配銀行卡號的示例代碼。
var text = '我的銀行卡號是622202xxxxxxxxxxxxx,你的銀行卡號是62222222222222222。'; // 銀行卡號正則表達式 var reg = new RegExp('\d{16,19}', 'g'); var cardNoArr = text.match(reg); console.log(cardNoArr); // ["622202xxxxxxxxxxxxx", "62222222222222222"]
該示例代碼使用正則表達式的RegExp函數來構造一個表達式對象,這里正則表達式的意思是匹配16位到19位的數字串(\d表示數字字符,{16,19}表示出現次數在16和19之間)。然后使用字符串的match方法來匹配文本中的銀行卡號。