У меня есть имя для ввода имени в форме HTML, и иногда пользователь вводит два имени, и мне нужно вычеркнуть второе имя и слово или символ, используемые для их соединения. Если я использую слово «и» или слово «или», то мой javascript работает нормально и удаляет второе имя и слово, используемое для их соединения. Однако, если я использую знак амперсанда (&) или знак плюс (+) или косую черту (/), независимо от того, как я его кодирую, будет удален только последний символ второго имени, а не символ присоединения или любое второе имя, кроме последнего символа.
Я пытался использовать строковые функции, регулярные выражения, тестировать мое регулярное выражение на regex.com (они там работают и правильно выбирают слова и соединяющие слова), дюжину различных вариантов моего регулярного выражения, которые все правильно работают с регулярным выражением. , com, чтобы выбрать текст, который я хочу удалить, но ничего из этого не работает в моей реальной форме.
Например, если я введу:
«Боб и Дейв» я получаю «Боб» - правильно
«Боб или Дейв» Я получаю «Боб» - правильно
Но если я введу:
«Боб и Дейв» Я получаю «Боб и Дэв» - Неверно
«Боб + Дейв» Я получаю «Боб + Дэв» - неверно
«Боб / Дейв» Я получаю «Боб» - неверно, но приемлемо
«Боб, Дэйв» Я получаю «Боб, Дэв» - Неверно
Это часть кода, который я использовал, несколько первых подходов работали для первых двух, ничего не работало для последних четырех.
Работает для "Боба и Дейва":
function noExtraNames() {
var pattern=document.forms[0].first_name.value;
var z = pattern.search(/(\s)*\w+/gi)
var x = pattern.search("AND", z+1)
if (z < x) {
alert('Please only enter ONLY ONE FIRST NAME')
document.forms[0].first_name.focus();
return document.forms[0].first_name.value=pattern.replace(/\s(AND)*\w+/gi, "");
}
}
Работает для "Боб или Дейв":
function noExtraNames() {
var pattern=document.forms[0].first_name.value;
var z = pattern.search(/\s(OR)*\w+/gi)
var x = pattern.search("OR", z+1)
if (z < x) {
alert('Please only enter ONLY ONE FIRST NAME')
document.forms[0].first_name.focus();
return document.forms[0].first_name.value=pattern.replace(/\s(or)*\w+/gi, "");
}
}
Это также сработало для «Боба и Дейва» и изменило соответствующее слово «и» для «или» или «, сработало для« Боба или Дейва »:
function noExtraNames() {
var pattern=document.forms[0].first_name.value;
var z = pattern.search("and")
var x = pattern.search("and")
if (z < x) {
alert('Please only enter ONLY ONE FIRST NAME')
document.forms[0].first_name.focus();
return document.forms[0].first_name.value=pattern.slice(0, z);
}
}
Однако это сработало для некорректного, но приемлемого «Боба, Дейва», но не сработало для «Боба и Дейва» или «Боба / Дейва», когда были заменены соответствующие символы:
function noExtraNames() {
var pattern=document.forms[0].first_name.value;
var z = pattern.search(/(,\s+)/gi);
var x = pattern.search((/(,\s+)/gi), z-1);
if (z < x) {
alert('Please only enter ONLY ONE FIRST NAME');
document.forms[0].first_name.focus();
return document.forms[0].first_name.value=pattern.replace(/(,\s+)/gi);
}
}
И это дало тот же неверный результат с "&" и "/":
function noExtraNames() {
var pattern=document.forms[0].first_name.value;
var z = pattern.search(/(\s&)/gi);
var x = pattern.search(/(\s&\s.[a-z].+)/gi, z-1);
if (x < z) {
alert('Please only enter ONLY ONE FIRST NAME');
document.forms[0].first_name.focus();
return document.forms[0].first_name.value=pattern.replace(/(\s&\s.[a-z].+)/gi, "");
}
}
Регулярные выражения все работали, чтобы выбрать правильный текст на regex.com, но никогда не работают в моей форме, и я почти не в силах разочароваться.
Почему это происходит и, что более важно, как я могу это исправить. Я пробовал несколько других решений, которые я нашел на этом сайте, таких как:
function noExtraNames() {
var pattern=document.forms[0].first_name.value;
var z = pattern.search(/(,\s+)/gi);
var x = pattern.search((/(,\s+)/gi), z-1);
if (x < z) {
alert('Please only enter ONLY ONE FIRST NAME');
document.forms[0].first_name.focus();
var s = document.forms[0].first_name.value;
var n = s.indexOf('&');
s = s.substring(0, n != -1 & n : s.length);
return document.forms[0].first_name.value = s;
}
}
Все без радости.
Ожидаемый результат: Боб
Фактический результат: Боб и Дав