javascript - react 组件和无效输入

标签 javascript validation input reactjs

我有以下 react 组件:

var App = React.createClass({
    getInitialState: function() {
        return {value: 4.5}
    },
    change: function(event) {
        this.setState({value: parseFloat(event.target.value)});
    },
    render: function() {
        return <input type="number" value={this.state.value} onChange={this.change}/>;
    }
});

React.render(<App/>, document.body);

你可以在这里看到:http://jsfiddle.net/2hauj2qg/

问题是,如果我想输入一个数字,例如:“4.7”。当用户输入“4.”时,由于在后面转换为 float ,它变为“4”。但这会打断用户正在输入的内容。解决此问题的推荐方法是什么?

最佳答案

正如 imjared 提到的,这是因为你正在使用 parseFloat

this.setState({value: parseFloat(event.target.value)});

相反,您可能希望只允许数字和小数点。它以字符串形式存储,从不更改他们的输入,但他们无法输入字母和空格等内容。

var nonNumericRegex = /[^0-9.]+/g;

this.setState({value: event.target.value.replace(nonNumericRegex, "")});

要允许负数,您需要这样做:

this.setState({
    value: event.target.value
        .replace(nonNumericRegex, "")
        .replace(/^(-.*?)-/g, "$1")
});

要强制使用前导美元符号和不超过两位小数,并且如果第一个字符(在 $ 之后)是小数,则在其前面加上 0。

this.setState({
    value: "$" + event.target.value
        .replace(nonNumericRegex, "")
        .replace(/(\.\d\d)\d+/g, "$1")
        .replace(/^\./g, "0.")
})

关于javascript - react 组件和无效输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613490/

相关文章:

javascript - 如何通过此代码使用 click jquery 函数

javascript - 为什么事件处理程序无法获得正确的句柄?

javascript - 你至少能得到https引荐来源网址的域名吗?

javascript - 如何在 Material UI 中使 TextField 无效

javascript - 将输入字段设置为标签元素的当前值

javascript - JavaScript 中的最大公共(public)数组切片

javascript - libphonenumber javascript - 验证

validation - 给样式元素一个 ID 是否有效?

c++ - 如何在 C++ 中使用 scanf() 读取字符串?

c - C中的文件处理;不会接受输入