【发布时间】:2018-06-22 07:54:14
【问题描述】:
我一直在处理的是一个文本input,它在用户键入时缩小了<option> 中的<select>。它工作正常,但我现在担心的是安全性、用户传递到 input 的内容以及潜在的恶意条目。
我想我可以执行<input placeholder='[a-zA-Z]' /> 之类的操作,但它仍然允许在文本框中输入其他字符。
我在这里做错了什么,什么是只允许输入字母数字的替代方法?
onInputChange(term) {
this.setState({ term });
}
renderOptionsSelect(term) {
return _.map(this.props.pos_list, p => {
var searchTerm = this.state.term.toLowerCase();
if (p.pos_code.toLowerCase().match(searchTerm)) {
return (
<option key={p.pos_code} value={p.pos_code}>{p.pos_code}</option>
);
}
});
}
// render the main element of the container
render() {
return (
<div className='panel panel-default'>
<div className='panel-heading'>
<h4><strong>Basic Query</strong></h4>
</div>
<div className='panel-body'>
<input
pattern='[a-zA-Z]'
className='form-control'
placeholder='Enter Keyword or Position Code'
value={this.state.term}
onChange={event => this.onInputChange(event.target.value)}
/>
<hr />
<h4>Position:</h4>
<select className='form-control'>
<option></option>
{this.renderOptionsSelect()}
</select>
<br />
<h4>Data Cut:</h4>
<select className='form-control' disabled={true} />
</div>
</div>
);
}
【问题讨论】:
-
pattern属性仅在提交表单时强制执行。像这样限制输入中允许的字符并不容易,在提交时验证输入要容易得多。 -
Hmmm... 听起来如果我希望验证立即发生,我可能需要在
onInputChange(term)中进行 JS 验证。 -
您担心什么样的恶意输入?搜索看起来像是在本地进行的,因此您可以在提交此表单所属的任何内容之前进行验证。您可以验证更改,但它会进一步减慢您的搜索速度,而且似乎没有必要。
-
另外,我不知道您是否感兴趣或不想要依赖项,但请查看:material-ui.com/#/components/auto-complete。这似乎是你想要的。
-
恶意输入,而且目前如果有人输入任何 `()`,它会在控制台中生成一个看起来不专业的 RegEx 错误。图 I 可以防止这种情况发生,即使有人不小心输入了其中一个字符。 (是的,大多数用户都没有看控制台)。
标签: javascript regex html reactjs react-redux