#javascript #regex
#javascript #регулярное выражение
Вопрос:
Мое требование заключается в том, что мне нужно выполнить проверку для входного текста, который не должен допускать специальных символов в начале и конце слова, а также не должен допускать двух последовательных специальных символов между словом.
Для вышеупомянутого требования я нашел регулярное выражение и протестировал его на regex101.com и все идет правильно, но когда я писал на javascript, я не смог получить желаемых результатов.
Фрагменты выглядят следующим образом:
$('input').bind('keypress', function (event) {
var re = new RegExp("^[a-z0-9](?!.*?[^na-z0-9]{2}).*?[a-z0-9]$");
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
if (key.match(re)) {
alert("Successful match");
} else {
alert("No match");
return false;
}
});
<input type="text">
Но каждый раз я получаю результат, который не соответствует действительности. Я не понимаю, где я ошибаюсь.
Пожалуйста, помогите в этом.
Ссылка на JSFiddle: Demo для регулярного выражения
Пример ввода регулярных выражений — взят из некоторого сообщения stackoverflow
Ответ №1:
Проблема заключалась в том, что вы сопоставляли самый последний символ, введенный пользователем, с регулярным выражением, а не со всем значением <input>
.
Попробуйте этот код вместо:
$('input').bind('keypress', function(event) {
var re = new RegExp("^[a-z0-9](?!.*?[^/na-z0-9]{2}).*?[a-z0-9]$");
// This is now set to the value of the whole <input> element
var key = $('input').val()
if (key.match(re)) {
alert("Successful match")
}
else {
alert("No match")
}
})
Ответ №2:
Попробуйте это.
^[a-z0-9](?!.*?[^na-z0-9]{2}).*?[a-z0-9]$