Выражение Regex возвращает неожиданный результат для специальных символов - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу проверить, содержит ли строка специальные символы.Я использую следующее 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 Ответ

2 голосов
/ 25 апреля 2019

Если вы используете '' для создания регулярного выражения, вам не следует добавлять / в начале и в конце, и вы должны избегать обратной косой черты:

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

Это много обратной косой черты,поэтому вы должны просто написать его с // в качестве разделителей:

const specialCharacters = /[ !@#$%^&*()_+=`~:;",.\-\[\]\{\}\'\\\|\<\>\/\?]/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...