正则检测字符串是否包含2个正斜杠或2个连字符的正确写法
正则实现日期分隔符匹配方案
问题说明
需要编写正则检测日期类字符串,要求字符串内包含2个正斜杠 或 2个连字符作为分隔符,以下格式为合法可匹配内容:
10/25/19842005/06/241882-03-1405-29-1932
原有失效正则为:/[\-\/{2,}/g
失效原因
原有正则存在基础语法错误,完全无法正常运行:
- 字符集标记
[没有对应的闭合],正则结构不合法 - 量词
{2,}被错误写在字符集内部,字符集内的符号只会被当作普通字符匹配,无法实现“计数匹配2个分隔符”的逻辑 - 没有做分隔符一致性校验,无法拦截斜杠、连字符混用的非法日期格式
可用正则
方案1:严谨匹配完整日期格式(推荐)
正则代码:
/^\d{1,4}([\/-])\d{1,2}\1\d{1,4}$/g
逻辑说明:
^\d{1,4}:匹配字符串开头1-4位数字,兼容「月/日/年」「年/月/日」两种日期顺序([\/-]):捕获第一个分隔符,仅允许为正斜杠/或连字符-\d{1,2}:匹配中间1-2位数字,对应月份、日期段\1:反向引用第一个捕获到的分隔符,强制第二个分隔符和第一个完全一致,既保证正好有2个同类型分隔符,又能拦截分隔符混用的非法情况\d{1,4}:匹配末尾1-4位数字,对应年份或日期段$:匹配字符串结尾,避免字符串夹带多余非法字符
方案2:仅校验是否存在2个同类型分隔符
如果不需要校验日期数字结构,只需要判断字符串里是否存在2个正斜杠或2个连字符,可使用更轻量的正则:
/(\/.*\/|-.*-)/g
逻辑为匹配「两个正斜杠夹任意内容」或「两个连字符夹任意内容」的字符串段,只要存在对应段即判定符合要求。
匹配效果验证
- 合法样例均能正常匹配:
10/25/1984、2005/06/24、1882-03-14、05-29-1932 - 非法样例会被拦截:
- 分隔符混用:
10/25-1984、2005-06/24 - 分隔符数量不符:
10/251984(仅1个斜杠)、10-25-19-32(3个连字符) - 夹带其他字符:
10/25/1984abc、x1882-03-14
- 分隔符混用:
内容的提问来源于stack exchange,提问作者klaurtar1
相关产品推荐
相关产品推荐

