我正在将{strong> React 和 Material-UI 的 TextField 与type='number'
一起使用,但是正如我所看到的,验证是很简单,它只允许可以代表数字[0-9\.eE-]*
一部分的任何字符,并允许这样的输入:eee---...e---0.-1
,我决定实现自己的验证。 (不确定这个简单的验证是Material-UI还是HTML本机验证,但没关系)
所以我写了这个正则表达式进行验证,但是一旦我输入一个与正则表达式不匹配的字符,我的 onChange 事件处理程序就不会被调用完全强,似乎该组件可以控制并应用其基本验证。在更正输入并使它与我的正则表达式匹配之前,不会再次调用事件处理程序。
我可以阻止组件以某种方式执行此操作吗?
onValueChange = (ev) => {
if( /^-?(\d+)?(\.\d*)?$/.test(ev.target.value)) {
this.setState({ value: ev.target.value });
}
答案 0 :(得分:0)
(不确定这个简单的验证是Material-UI还是HTML本机验证,但没关系)
此琐碎的验证是本机验证,因为Material-UI InputBase
组件仅将type='number'
传输到本机<input />
,并且没有定义任何其他验证。
似乎onchange
事件不会在每个输入上触发-也是本机输入的行为。您可以在以下示例中进行检查:https://codesandbox.io/s/20z5qrnqq0?fontsize=14-如您所见-onChange
事件也仅针对“有效”字符而被触发。
我尝试通过oninput
HTML5事件找到其他解决方案,如建议的here一样,但它也不起作用。因此,在这种情况下,我认为您可以使用type='text'
输入来控制所有可能的输入,从而做出正确的决定。