簡體   English   中英

如何拒絕包含日期格式的非連續字符的字符串

[英]How can I reject a string containing non-consecutive characters in a date format

我正在嘗試提出一個正則表達式,它將拒絕提供的日期格式中的非連續字符。 我希望盡可能靈活,因此我決定我的日期格式字符串可以包含 YY 或 YYYY、MM 或 MMM、DD 或 DDD、hh mm 和 ss。

我已經制定了一些正則表達式 - 例如,匹配以下內容將顯示月份是 3 個字符格式:

([M])\\1{2}

關於檢查日期格式不包含非連續字符,我完全一無所知。 例如,以下日期格式應該是有效的:

YYYY-MM-DD hh:mm:ss
hh:mm:ss YYYY-MM-DD 
DD/MMM/YYYYhh-mm

但是這些格式應該被拒絕

YYYY-MM-DD hh:mm:ss YYYY // year appears twice
hh:mm:ss YYYY-MM-DD hh // hour appears twice
DD/MMM/YYYYhh-mm m // m not consecutive with other m

為了將來的擴展,我想允許非連續的特殊字符 (/ - . : ) 等,並拒絕所有非連續的字母數字字符。 區分大小寫 - mm 和 MM 不一樣(如上)

只是要清楚 - 我不是要驗證實際日期 - 我只是想驗證日期格式字符串。

我建議檢查之前是否至少出現過一次相同的字符,然后否定結果:

function(text) { 
    return !/(\w)\1*(?!\1).*\1/.test(text);
}

請參閱正則表達式演示 您可以將\\w更改為[YMDhms]以僅檢查這六個字母。

圖案詳情

  • (\\w) - 第 1 組(通過\\1反向引用進一步引用):一個字字符
  • \\1* - 與 Group 1 中相同的字符出現零次或多次
  • (?!\\1) - 設置邊界,確保下一個字符與 Group 1 中的字符不同
  • .* - 除換行符以外的任何零個或多個字符,盡可能多
  • \\1 - 與 Group 1 相同的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM