如何同时将正则拨号应用于多个输入

发布于 2025-02-02 00:36:16 字数 3852 浏览 4 评论 0原文

我是编程的新手,试图应用以下的正则表达式('')用仪表板(' - ')替换每个空间(' - '),但是QuerySelectorall()返回了节点符,在一些努力尝试获得数组的努力之后,我可以使用Foreach (),现在我介入此错误。

如果可能的话,我确实打算使用其他一些正则表达式来验证某些字段中是否有http/https,那么如果解决方案确实允许我以后使用其他正格件

const reset = document.querySelector(".reset-button");
const submit = document.querySelector("#generate-utm");
const form = document.querySelector(".data-form");
const inputs = document.querySelectorAll(".data-input");
const copyButton = document.querySelector(".copy-button");


Array.from(inputs).forEach(() => {
  addEventListener("keyup", (e) => {
    e.value = e.value.replace(/ /g, "-");
  });
});

//end inputs logic

// buttons logic

submit.addEventListener("click", (e) => {
  e.preventDefault();
  const url = document.querySelector(".url").value;
  const source = document.querySelector(".source").value;
  const type = document.querySelector(".type").value;
  const name = document.querySelector(".name").value;
  const term = document.querySelector(".term").value;
  const content = document.querySelector(".content").value;
  const output = document.querySelector(".data-output");

  output.value = `${url}?utm_source=${source}&utm_medium=${type}&utm_campaign=${name}&utm_term=${term}&utm_content=${content}`;
});

reset.addEventListener("click", (e) => {
  e.preventDefault();
  reset.classList.toggle("rotate");
  form.reset();
});

copyButton.addEventListener("click", (e) => {
  e.preventDefault();
  const dataOutput = document.querySelector(".data-output");

  if (!navigator.clipboard) {
    dataOutput.select();
    document.execCommand("copy");
  } else {
    navigator.clipboard
      .writeText(dataOutput.value)
      .then(function () {
        alert("abrir popup!");
      })
      .catch(function () {
        alert("Erro ao copiar, tente copiar manualmente");
      });
  }
});

// end buttons logic
<header>
        <h1 class="heading">Gerador de UTM<span style="color: hsl(360, 69%, 42%);">.</span></h1>
    </header>
    <main>
        <div class="data-inputs section">
            <form class="data-form">
                <div class="input-wrapper">
                    <div class="left">
                        <input type="text" class="data-input url" placeholder="URL do site">
                        <input type="text" class="data-input source" placeholder="Fonte da campanha">
                        <input type="text" class="data-input type" placeholder="Tipo da campanha">
                    </div>
                    <div class="right">
                        <input type="text" class="data-input name" placeholder="Nome da campanha">
                        <input type="text" class="data-input term" placeholder="Termos da campanha">
                        <input type="text" class="data-input content" placeholder="Conteúdo da campanha">
                    </div>
                </div>
                <div class="send-data">
                    <input type="submit" class="button" id="generate-utm" value="Gerar UTM">
                    <button class="reset-button">
                            refresh
                        </button>
                </div>
            </form>
        </div>
        <div class="value-inputs section">
            <textarea id="" cols="30" rows="10" class="data-output" placeholder="Sua UTM aparecerá aqui"
                disabled></textarea>
            <input type="submit" class="button copy-button" value="Copiar">
        </div>
    </main>

I' new to programming, trying to apply a regex that replaces every space (' ') with a dash ('-') but the querySelectorAll() returns a NodeList, after some struggle trying to get an Array from so i could use forEach(), now i step in this error.

If possible, i do intend to use a few other regular expressions to validate if there's http/https in some fields so if the solution does allow me to apply other regex later would be awesome

const reset = document.querySelector(".reset-button");
const submit = document.querySelector("#generate-utm");
const form = document.querySelector(".data-form");
const inputs = document.querySelectorAll(".data-input");
const copyButton = document.querySelector(".copy-button");


Array.from(inputs).forEach(() => {
  addEventListener("keyup", (e) => {
    e.value = e.value.replace(/ /g, "-");
  });
});

//end inputs logic

// buttons logic

submit.addEventListener("click", (e) => {
  e.preventDefault();
  const url = document.querySelector(".url").value;
  const source = document.querySelector(".source").value;
  const type = document.querySelector(".type").value;
  const name = document.querySelector(".name").value;
  const term = document.querySelector(".term").value;
  const content = document.querySelector(".content").value;
  const output = document.querySelector(".data-output");

  output.value = `${url}?utm_source=${source}&utm_medium=${type}&utm_campaign=${name}&utm_term=${term}&utm_content=${content}`;
});

reset.addEventListener("click", (e) => {
  e.preventDefault();
  reset.classList.toggle("rotate");
  form.reset();
});

copyButton.addEventListener("click", (e) => {
  e.preventDefault();
  const dataOutput = document.querySelector(".data-output");

  if (!navigator.clipboard) {
    dataOutput.select();
    document.execCommand("copy");
  } else {
    navigator.clipboard
      .writeText(dataOutput.value)
      .then(function () {
        alert("abrir popup!");
      })
      .catch(function () {
        alert("Erro ao copiar, tente copiar manualmente");
      });
  }
});

// end buttons logic
<header>
        <h1 class="heading">Gerador de UTM<span style="color: hsl(360, 69%, 42%);">.</span></h1>
    </header>
    <main>
        <div class="data-inputs section">
            <form class="data-form">
                <div class="input-wrapper">
                    <div class="left">
                        <input type="text" class="data-input url" placeholder="URL do site">
                        <input type="text" class="data-input source" placeholder="Fonte da campanha">
                        <input type="text" class="data-input type" placeholder="Tipo da campanha">
                    </div>
                    <div class="right">
                        <input type="text" class="data-input name" placeholder="Nome da campanha">
                        <input type="text" class="data-input term" placeholder="Termos da campanha">
                        <input type="text" class="data-input content" placeholder="Conteúdo da campanha">
                    </div>
                </div>
                <div class="send-data">
                    <input type="submit" class="button" id="generate-utm" value="Gerar UTM">
                    <button class="reset-button">
                            refresh
                        </button>
                </div>
            </form>
        </div>
        <div class="value-inputs section">
            <textarea id="" cols="30" rows="10" class="data-output" placeholder="Sua UTM aparecerá aqui"
                disabled></textarea>
            <input type="submit" class="button copy-button" value="Copiar">
        </div>
    </main>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

失退 2025-02-09 00:36:16

只需使用e.target访问实际的HTML元素即可。

这是更新的代码:

Array.from(inputs).forEach(() => {
  addEventListener("keyup", (e) => {
  //console.log("evaluacion",e.target)
    e.target.value = e.target.value.replace(/ /g, "-");
  });
});

//end inputs logic

// buttons logic

Just use e.target to access the actual HTML element.

Here's the updated code:

Array.from(inputs).forEach(() => {
  addEventListener("keyup", (e) => {
  //console.log("evaluacion",e.target)
    e.target.value = e.target.value.replace(/ /g, "-");
  });
});

//end inputs logic

// buttons logic
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文