3 回答

TA貢獻1788條經驗 獲得超4個贊
您可以對不想匹配的模式進行負面展望并使用此正則表達式,
^(?!\d{4}-\d{10})(?!\d{10}-\d{4})\d{4}-?\d{6}-?\d{4}$
解釋:
^
--> 字符串開頭(?!\d{4}-\d{10})
--> 負前瞻以避免匹配此模式(?!\d{10}-\d{4})
--> 負前瞻以避免匹配此模式\d{4}-?\d{6}-?\d{4}
--> 匹配你想要的模式$
--> 字符串結束
我能想到的另一種模式,更簡單優雅,你可以用這個,
^\d{4}(-?)\d{6}\1\d{4}$
解釋:
^
--> 字符串開頭\d{4}
--> 正好匹配四位數字(-?)
--> 匹配一個可選的連字符并在組 1 中捕獲\d{6}
--> 精確匹配六位數\1
--> 這確保兩個連字符都存在或不存在,如正則表達式中所述\d{4}
--> 正好匹配四位數字$
--> 字符串結束

TA貢獻1772條經驗 獲得超6個贊
只需將 or 與模式或 14 個數字一起使用。
var re = /^(\d{4}-\d{6}-\d{4}|\d{14})$/
function test(str) {
console.log(str, re.test(str))
}
['1234-123456-1234', '12341234561234',
'1234-1234561234', '1234123456-1234'].forEach(test)

TA貢獻1825條經驗 獲得超4個贊
^([\d]{4}[-]?[\d]{6}[-]?[\d]{4})|([\d]{16})$
希望這可以幫助!它有兩個正則表達式,一個帶有 hiphens,另一個帶有整數(16 位)
添加回答
舉報