[英]How to combine regular expressions
我有以下功能,它以兩種主要格式驗證日期格式:有和沒有分隔符。
function check_date_format (my_date) {
var regex = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$/; //Declare regex for date with separators
var date_array = my_date.match(regex);
if (date_array == null) {
regex = /^(\d{2})(\d{2})(\d{2})$/; //Declare regex for date without separators
date_array = my_date.match(regex);
if (date_array == null) {
return false;
} else {
return true;
}
}
return true;
}
第一個.match(regex)
返回5個元素的數組:day(1或2位),第一個分隔符( - 或/),月份(1或2位數),第二個分隔符( - 或/可以與第一個不同分隔符)和年份(2位數)。
第二個.match(regex)
返回3個元素的數組:day(2位),month(2位)和year(2位)。
我試圖將這兩個與這個正則表達式合並:
/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$|^(\d{2})(\d{2})(\d{2})$/
並且驗證工作但是my_date
變成8個單元格的數組,其中前5個或后3個將是未定義的,具體取決於正則表達式的哪個部分與模式匹配。
有沒有辦法合並這兩個部分,只返回一個5或3個單元格的數組,具體取決於匹配的部分?
這是一個用於測試多種日期格式以及合並和拆分正則表達式的小提琴 。
這個正則表達式應該做你想要的:
/^(\d{1,2})([\/-]?)(\d{1,2})\2(\d{2})$/
日,月,年分別在捕獲組1,3,4。
我使用backreference \\2
來確保第二個分隔符(年和月之間)與捕獲組2 ([\\/-]?)
中捕獲的第一個分隔符相同。 因此,它與您的代碼略有不同:它不接受帶有混合分隔符的輸入,例如12/3-01
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.