我试图“检查” MM / YY的字段是否在第三个字符处包含“ /”,如果不是,则在提交表单之前使用Javascript将其添加。例如,如果用户输入“ 0120”,则我希望此功能提交表单,就像用户输入“ 01/20”一样。
如果用户已经输入“ 01/20”,我希望它什么也不做。最简单的方法是什么?我在下面的尝试无效。
<input id="month-year">
var monthYear = document.getElementById('month-year').value;
if(monthYear.includes("/")) {
//do nothing
} else {
monthYear = monthYear.insert(2,"/");
}
我知道这里还有其他有关如何验证输入模式是否包含“ /”的问题,但是我不太关心仅为了告诉用户“重试”而验证模式,而是更关心在我们的一端自动更正它,因此用户不必(我找不到)。
答案 0 :(得分:0)
您可以使用.indexOf方法执行该操作,如果不存在模式,则返回-1。
const offset = monthYear.indexOf("/");
if (offset === 2) {
// match with "01/20"
} else {
// it's maybe an other data e.g. "foobar"
}
但是您应该使用正则表达式进行更深入的研究:
const match = /(\d\d)\/?(\d\d)?(\d\d)/.exec(monthYear);
if (match) {
monthYear = match[1] + '/' + match[3];
} else {
// bad month-year format
}
答案 1 :(得分:0)
如果您使用的是IE,则.includes
将不起作用。否则,您发布的代码很好,其他地方还有一个错误。
您也可以只使用/
应该位于的索引。或RegExp。
const bad = '0118'
const good = '01/18'
const re = /\d\d\/\d\d/
console.log( bad.includes('/'), good.includes('/') ) // false true
console.log( bad[2] === '/', good[2] === '/' ) // false true
console.log( re.test(bad), re.test(good) ) // false true
答案 2 :(得分:0)
正确确定日期字符串缺少'/'之后,您要查找的是数组拼接。
how to insert an item into an array at a specific index
使用arrMonthYear = monthYear.split('');将您的字符串转换为数组。 然后,您可以使用splice在索引处插入。 并使用join将其转换回字符串。
if(monthYear.includes("/")) {
//do nothing
} else {
arrMonthYear = monthYear.split('');
//[M, M, Y, Y]
arrMonthYear.splice(2, 0, "/");
// [M, M, '/', Y, Y]
strMonthYear = arrMonthYear.join(''))
// new string with format MM/YY
}
您也可以将字符串作为字符串来操作,但是大多数方法都不那么简单:string manipulation,并且无论如何都需要将字符串视为数组。