输入模式='[a-zA-Z]'在React应用程序中不起作用

soc*_*pet 7 javascript regex html5 reactjs react-redux

我一直在努力是一个文本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>
    ); 
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*nik 5

这很容易。你:

  1. 删除模式属性。
  2. onInputChangeinput事件而不是change事件 ( onInput={event => this.onInputChange(event.target.value)})注册您的方法。
  3. onInputChange在改变状态之前清理接收到的值。

  • 这与安全无关 - 与用户体验有关。当您可以立即验证您的输入时,您是否愿意等待服务器验证您的输入? (16认同)
  • 但说真的,客户端 JS 和安全检查?:(。你应该首先重新考虑你是否需要它。 (2认同)