正则表达式对特殊字符恢复意外结果

时间:2019-04-25 09:11:01

标签: javascript regex

我要检查字符串是否包含特殊字符。 我为此使用了以下regex

使用regex101在线尝试可完美运行。 但是,当我将其包含在代码中时,它将不起作用。它总是返回false ...为什么?

input字段用于处理用户输入。

<input
    placeholder={placeholder}
    type='text'
    autoComplete='off'
    value={this.state.text}
    onChange={event => this.handleOnChange(event)}
/>

只要键入内容,handleOnChange就会处理。

handleOnChange = event => {
    const text = event.target.value;
    this.setState({
        text
    });

    this.checkForSpecialCharacter(text)
}


checkForSpecialCharacter = text => {
    const specialCharacters = new RegExp('/[ !@#$%^&*()_+=`~:;",.\-\[\]\{\}\'\\\|\<\>\/\?]/');
    console.log(specialCharacters.test(text)) // <- logs false
    this.setState({
        foo: {
            ...this.state.foo,
            specialCharacter: specialCharacters.test(text),
        }
    });
}

1 个答案:

答案 0 :(得分:2)

如果您使用''创建正则表达式,则不应在开头和结尾添加/,而应避免使用反斜杠:

new RegExp('[ !@#$%^&*()_+=`~:;",.\\-\\[\\]\\{\\}\\'\\\\\\|\\<\\>\\/\\?]');

有很多反斜杠,因此您应该使用//作为分隔符来编写它:

const specialCharacters = /[ !@#$%^&*()_+=`~:;",.\-\[\]\{\}\'\\\|\<\>\/\?]/;