JavaScript 中的通配符日期形式
Wildcard date form in JavaScript
我想检查字符串是否满足条件(第一、第二、第四、第五、第七、第八、第九和第十字符可以是任意数字。第三个和第六个 必须是正斜杠。)像日期格式。我需要这个:
if (date !== SOMETHING ){
alert("Wrong input!");}
您可以尝试用正则表达式匹配日期(这个确保它匹配格式(DD/MM/YYYY 或 MM/DD/YYYY):
if (date.match( /^\d{2}\/\d{2}\/\d{4}$/ )) {
alert("Valid input!");
} else {
alert("Wrong input!");
}
此正则表达式 /^\d{2}\/\d{2}\/\d{4}$/
returns true
如果字符串匹配以下模式:
- 2 位数
- 正斜杠
- 2 位数
- 正斜杠
- 4 位数
这里有一个 JS Fiddle 显示它正在工作。
这是另一个(更多 "Eloquent")解决方案(return 通过函数获取 JavaScript 日期):
function findDate(string) {
var dateTime = /(\d{2})\/(\d{2})\/(\d{4})/;
var match = dateTime.exec(string);
return new Date(Number(match[3]),
Number(match[2]) - 1,
Number(match[1]));
}
alert(findDate("30-01-2003"));
此外 - 我建议阅读 Regular Expressions - Eloquent JavaScript
如果您想验证格式并且它是一个有效的日期,您必须检查这些值。这可以用正则表达式来完成,但使用日期要简单得多,例如
// Validate dd/mm/yyy date string
function isValidDMY(s) {
var b = s.split('/');
var d = new Date(b[2], --b[1], b[0]);
return d && d.getMonth() == b[1];
}
console.log(isValidDMY('4/4/2015')); // true
console.log(isValidDMY('29/2/2015')); // false
坚持用户输入日期的单个数字前导零确实没有意义,因此以上接受 4/4/2015 或 04/04/2015。
编辑
如果您坚持在日期和月份数字前导零,您也可以通过将最后一行更改为:
来检查这一点
return /^(\d\d\/){2}\d{4}$/.test(s) && d && d.getMonth() == b[1];
我想检查字符串是否满足条件(第一、第二、第四、第五、第七、第八、第九和第十字符可以是任意数字。第三个和第六个 必须是正斜杠。)像日期格式。我需要这个:
if (date !== SOMETHING ){
alert("Wrong input!");}
您可以尝试用正则表达式匹配日期(这个确保它匹配格式(DD/MM/YYYY 或 MM/DD/YYYY):
if (date.match( /^\d{2}\/\d{2}\/\d{4}$/ )) {
alert("Valid input!");
} else {
alert("Wrong input!");
}
此正则表达式 /^\d{2}\/\d{2}\/\d{4}$/
returns true
如果字符串匹配以下模式:
- 2 位数
- 正斜杠
- 2 位数
- 正斜杠
- 4 位数
这里有一个 JS Fiddle 显示它正在工作。
这是另一个(更多 "Eloquent")解决方案(return 通过函数获取 JavaScript 日期):
function findDate(string) {
var dateTime = /(\d{2})\/(\d{2})\/(\d{4})/;
var match = dateTime.exec(string);
return new Date(Number(match[3]),
Number(match[2]) - 1,
Number(match[1]));
}
alert(findDate("30-01-2003"));
此外 - 我建议阅读 Regular Expressions - Eloquent JavaScript
如果您想验证格式并且它是一个有效的日期,您必须检查这些值。这可以用正则表达式来完成,但使用日期要简单得多,例如
// Validate dd/mm/yyy date string
function isValidDMY(s) {
var b = s.split('/');
var d = new Date(b[2], --b[1], b[0]);
return d && d.getMonth() == b[1];
}
console.log(isValidDMY('4/4/2015')); // true
console.log(isValidDMY('29/2/2015')); // false
坚持用户输入日期的单个数字前导零确实没有意义,因此以上接受 4/4/2015 或 04/04/2015。
编辑
如果您坚持在日期和月份数字前导零,您也可以通过将最后一行更改为:
来检查这一点 return /^(\d\d\/){2}\d{4}$/.test(s) && d && d.getMonth() == b[1];