我发现有很多正则表达式检查与格式匹配的日期值(数字),但我不想检查这个。我让用户可以选择编写自己的自定义模式日期,如下所示:
d-mm-yyyy
MM/dd/yy
yyyy.mm.d
我想检查这个用户写的字符串"MM/dd/yy“是有效的,除了d,DD,MM,...中间加".","/","-“。斯特兰奇没有发现任何检查所有简单模式的正则表达式,而是发现了许多检查数字的正则表达式,而不是模式本身。
发布于 2020-07-28 17:12:24
这应该是可行的:
const regex = /(\d{1,2}(?:-|\/)\d{1,2}(?:-|\/)(?:\d{4}|\d{2}))|(\d{4}\.\d{1,2}\.\d{1,2})/gm
// valid cases
regex.test('1-01-2000')
regex.test('12-1-2000')
regex.test('10/10/11')
regex.test('10/1/2011')
regex.test('1/1/2011')
regex.test('2000.12.1')
regex.test('2000.1.11')
这将为测试日期的有效性提供一种非常健壮的方法。
发布于 2020-07-28 17:27:18
好吧,我修改了我的答案。因此,如果你想创建某种日期模式验证器,请检查下面的代码。它不仅是RegExp,而且还有一些功能逻辑来捕获重复等。
const test = (str) => {
// Check main pattern
const m = str.match(/^([md]{1,2}|y{4}|y{2})[-\/\.]([md]{1,2}|y{4}|y{2})[-\/\.]([md]{1,2}|y{4}|y{2})$/i);
// Print false
const noMatch = () => console.log('Not match!', str);
// If no matched groups
if(!m) {
noMatch();
return false;
}
// Unique obj
const unique = {};
// Check if all match is unique
const mArr = ["d", "m", "y"];
for(let i = 1; i < m.length; i++) {
const mStr = m[i];
// Loop avaliable char
for(let i = 0; i < mArr.length; i++) {
const re = new RegExp(`^[${mArr[i]}]+$`, "i");
// If match char
if(re.test(mStr)) {
// If already in unique object
if(unique[mArr[i]]) {
noMatch();
return false;
} else unique[mArr[i]] = true;
}
}
}
// Match
console.log('Matched!', str);
}
test('dd-mm-yyyy');
test('YYYY/MM/DD');
test('dd.mm.yy');
test('dd.dd.yyyy');
test('dd|mm|yyyy');
test('ddd-mmm-yyyy');
test('dd/mm/yyy');
https://stackoverflow.com/questions/63139231
复制相似问题