Регулярное выражение в javascript для специальных символов в начале и конце и двух последовательных промежуточных не работает

#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")
    }
})
 

JSFiddle

Ответ №2:

Попробуйте это.

 ^[a-z0-9](?!.*?[^na-z0-9]{2}).*?[a-z0-9]$