【发布时间】:2019-10-28 06:55:04
【问题描述】:
我想处理onChangeTextTextInputReact native中的电话号码字段,
来自this answer,我可以使用^08[0-9]{9,}$ 模式,但问题出在第一个数字上,正则表达式不允许0,因为正则表达式模式上的08,如果我添加0|08...,正则表达式允许0 但它允许第二个数字上的任何数字,而不是 08。
我的问题: 强制正则表达式处理第一个数字是 0 和第二个数字是 8 的最佳方法是什么?所以我得到 08xxxxxxxxxx(当 x 是另一个数字 0-9 时)
这是我在reactJS 中的当前代码示例,您可以感觉到我在输入 0 后可以输入任何数字,而对于新建议的正则表达式 (^0|08[0-9]{9,}$),我不能在 0 之后再输入任何数字,
注意:我不知道为什么我的问题被标记为重复,因为重复并不能帮助我解决问题
class NameForm extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
let reg = /^0|08[0-9]{9,}$/
if(reg.test(event.target.value)){
this.setState({value: event.target.value});
}
}
handleSubmit(event) {
alert('A name was submitted: ' + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Phone:
<input type="text" value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
ReactDOM.render(
<NameForm />,
document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
【问题讨论】:
-
不清楚具体要匹配什么不匹配,能否举几个需要匹配和不匹配的例子。
-
@iakobski 你可以试试我上面的 sn-p 来降低我真正想要的,我想要的只是将第一秒数锁定到
08,但如果我这样做08[0-9]{9,}正则表达式,用户可以't 在文本框中输入 0
标签: javascript regex react-native textinput