我试图在Javascript中构建一个12小时的输入组件,并且我想要验证格式,因为用户类型,就像解析器验证传入令牌一样。用于验证12小时时间的Javascript正则表达式
我使用的反应,所以在每个渲染的字段值被传递trhough以下的正则表达式:
const validTime = /(0[1-9])|(1[0-2]):([0-5][0-9])\s((a|p|A|P)(m|M))/;
我测试,如果该值有效,如果我不能添加红色边框的输入,但是通过这种方法,我可以写任何东西,它不会被提交,但你可以写如ajsjjsdf,我正在寻找不同的东西。允许用户实时输入上述正则表达式规则允许的字符。
编辑:
我加入一些代码...
基本上simpliefied输入为:
<input
ref={(input) => {this[keyName] = input}}
className="form-control"
placeholder="09:00 AM"
value={scheduleTime ? scheduleTime.value : ''}
onChange={(ev) => this.onChangeTimeSchedule(ev, keyName)}/>
,值处理程序:
onChangeTimeSchedule = (ev, scheduleKey) => {
const validChar = /[0-9]|[aApPmM]|[\s\b]|:/;
const validTime = /(0[1-9])|(1[0-2]):([0-5][0-9])\s((a|p|A|P)(m|M))/;
const { value } = ev.target;
if(!validTime.test(value))
return;
const { schedule } = this.state;
schedule[scheduleKey] = {value, invalid: false};
this.setState({schedule});
};
如果我使用validChar它只会允许我想要的字符,但它会允许像10:aaaM这样的字符串。
如果我在这种情况下使用了validTime(这是我为每个渲染所做的检查,为无效添加红色边框),我总是返回false,因为它除了完全匹配之外:10:0是错误的,10 :00 PM是正确的。
请张贴** **输入 –
@PedroLobito更新了我的一些代码问题的一个样本。 –
我觉得可能存在一种更简单的方法,但是如果您根据文本的长度做了if语句,该怎么办?由于时间是如此结构化,如果输入的第一个字母不是0或1,则在输入的左侧附加0。如果长度为2,则附加一个:如果长度为5则追加一个空格。然后基于输入的长度进行验证。如果字符类型对于该长度无效,请删除字符。 –