【问题标题】:Validation issues in JavaScriptJavaScript 中的验证问题
【发布时间】:2022-11-06 06:22:26
【问题描述】:

以下函数应该检查两个输入:名称和消息。我不确定这里出了什么问题,但我想先看看输入是否为空,如果不是,我想用正则表达式检查它。

我只是想看看它是否为空的消息。如果其中一个为空,我想返回一条消息,要求输入正确的输入。我不确定是否应该在这里使用 else if 或完全分开 if 语句。如果我这样做完全疯了,我也想知道这一点。

JavaScript:

function validate() {
  let regName = /^[a-zA-Z]+ [a-zA-Z]+$/;
  let name = document.querySelector("[name='user-name']");
  let msg = document.querySelector("[name='user-message']");
  
  if (name) {
      name = name.value;   
  } else if (!regName.test(name)){
    document.querySelector("[name='user-name']");
    return "Please enter your first & last name.";    
  }

  if (msg) {
      msg = msg.value;
  } else if (msg.trim() == "") {     
    document.querySelector("[name='user-message']");
    return "Please enter a message";
  } 
} 

【问题讨论】:

  • 任何人的名字无论拼写如何都不是“有效的”吗?如果我愿意,我明天可以去法庭,把我的名字改成c++。 ...所以你需要检查某人的“名字”的有效性,而不是一个空字符串,去掉所有的空格?
  • 好吧,我正在尝试检查名字和姓氏,是的,您可以合法地这样做,但是如果您必须将信息输入表格,那将如何工作?
  • 如果无法找到 user-name 输入,您只会使用 regName.test(name)。为什么else if 中有那个代码?
  • 该表格将接受我输入的任何名称。理想情况下。但是如果你想要非异常情况,你总是可以有一个常见姓氏的“查找”表。第一个名字是所有赌注。
  • 我不知道如何同时进行这两项检查

标签: javascript


【解决方案1】:

你的 ifelse if 逻辑是错误的。只有当document.querySelector() 找不到输入元素时,您才执行正则表达式测试。 else if 仅在前一个条件失败时运行。

您应该将该检查放入检查输入是否已找到的同一 if 中。

function validate() {
  let regName = /^[a-zA-Z]+ [a-zA-Z]+$/;
  let name = document.querySelector("[name='user-name']");
  let msg = document.querySelector("[name='user-message']");

  if (name && !regName.test(name.value)) {
    return "Please enter your first & last name.";
  }

  if (msg && msg.value.trim() == "") {
    return "Please enter a message";
  }
}

【讨论】:

  • 好的谢谢。我已经尝试过了,但我没有将 .value 附加到第二个条件,这就是为什么我将它分解为单独的 if 语句。感谢您清除它。
  • 您也可以使用单独的变量来执行此操作,但这些行应该在 if 块内,就在您分配 name = name.value; 之后。不在else if。想想“else”这个词在英语中的含义。
猜你喜欢
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2018-08-17
相关资源
最近更新 更多