#javascript #html #arrays #string #nodes
#javascript #HTML #массивы #строка #узлы
Вопрос:
Это функция проверки, которая принимает ввод электронной почты и сохраняет неправильные символы внутри неверного массива с помощью match . Что я хочу сделать, так это иметь возможность рисовать линию через неправильные символы, используя тег S. Если электронное письмо содержит один недопустимый символ, например ab c@abc.abc , линия проходит через » » правильно и отображает ab c@abc.abc Однако, если имеется более одного недопустимого символа, например a b c@abc.abc , оба » » будут зачеркнуты, но когда они отобразятся на экране, они будут перемещенырядом друг с другом, например ab c@abc.abc . Мне нужна помощь в том, как заставить этот текст отображаться как a b c@abc.abc .
function validate()
{
var str = document.getElementById("email").value;
var len = str.length;
var patt1 = /^[^;,':?!*#^amp;@ -] w @{1}w .{1}w $/;
Если мы пройдем тест регулярных выражений, электронное письмо будет действительным.
if(patt1.test(str))
{
document.getElementById("validate").innerHTML = "valid";
}
В противном случае мы сохраним плохие
else
{
alert("not a valid email");
document.getElementById("validate").innerHTML = "";
var bad = str.match(/[;,':?!*#^amp;@ -] /);
var wholestr = document.getElementById("validate");
var x = document.createElement("S");
Здесь я попытался динамически создавать переменные в массиве, все с их отдельными текстовыми узлами. Сначала это делается для недопустимых символов, затем для допустимых символов. Каждый новый текстовый узел добавляется в wholestr, который будет отображаться на экране. Идея заключалась в том, чтобы каждый символ был отдельным текстовым узлом, чтобы недопустимые символы не отображались рядом; однако это все равно происходит.
for(var i = 0; i < len; i )
{
for(var j = 0; j < bad.length; j )
{
if(str[i] == bad[j])
{
var errors = [];
for(var k = 0; k < bad.length; k )
{
errors[k] = document.createTextNode(bad[j]);
}
for(var k = 0; k < errors.length; k )
{
x.appendChild(errors[k]);
wholestr.appendChild(x);
}
}
else
{
var valids = [];
for(var k = 0; k < str.length; k )
{
valids[k] = document.createTextNode(str[i]);
}
wholestr.appendChild(valids[i]);
//var str1 = document.createTextNode("");
//str1.textContent = str[i];
//wholestr.appendChild(str1);
}
}
}
}
}
Комментарии:
1. это редактирование первого абзаца, когда ab c@abc.abc вводится, результат равен ab<s> </s>c@abc.abc
Ответ №1:
Просто ответил на вопрос, моя ошибка была довольно простой, она была связана с элементом x, который содержал тег S.
function validate()
{
var str = document.getElementById("email").value;
var len = str.length;
var patt1 = /^[^;,':?!*#^amp;@ -] w @{1}w .{1}w $/;
if(patt1.test(str))
{
document.getElementById("validate").innerHTML = "valid";
}
else
{
alert("not a valid email");
document.getElementById("validate").innerHTML = "";
var bad = str.match(/[;,':?!*#^amp;@ -] /);
var wholestr = document.getElementById("validate");
for(var i = 0; i < len; i )
{
for(var j = 0; j < bad.length; j )
{
if(str[i] == bad[j])
{
var errors = [];
Здесь мне нужен был еще один динамический массив, в котором хранились элементы с тегом S. Таким образом, каждый недопустимый символьный узел будет добавлен к своему собственному document.createElement(«S»)
var x = [];
for(var k = 0; k < bad.length; k )
{
x[k] = document.createElement("S");
errors[k] = document.createTextNode(bad[j]);
}
for(var k = 0; k < errors.length; k )
{
x[k].appendChild(errors[k]);
wholestr.appendChild(x[k]);
}
}
else
{
var valids = [];
for(var k = 0; k < str.length; k )
{
valids[k] = document.createTextNode(str[i]);
}
wholestr.appendChild(valids[i]);
//var str1 = document.createTextNode("");
//str1.textContent = str[i];
//wholestr.appendChild(str1);
}
}
}
}
}