无法从服务器正确验证用户输入?

时间:2017-04-12 00:52:51

标签: javascript php html

如何一次检查多个变量输入以确保正则表达式正常工作?每当我输入任何内容时,表单都会提交并且不会发出任何警报。

我也试过了正则表达式验证的test()方法,但仍然没有运气。

我正在尝试使用以下正则表达式验证用户输入,该正则表达式将不是数字或空格的任何内容视为错误输入。

var format=/^(\s*|\d+)$/;

它只接受文本框中的数字和空格。

以下javascript就是我所拥有的:



var pitch = document.getElementById("pitch");
var chisel = document.getElementById("chis");
var saw = document.getElementById("saw");

//var arguments = [chisel, saw, pitch];

var format = /^(\s*|\d+)$/;

function regexTest() {
  if (!chisel.match(format) && !saw.match(format) && !pitch.match(format)) {
    alert("Repressed Action");
    return false;
  } else {
    alert('Thank you');
  }
}

<div class="lab">

  <form method="post" action="http://weblab.kennesaw.edu/formtest.php">
    Chisels: <input type="text" name="chisels" id="chis" size="5" /> Saw: <input type="text" name="saw" id="saw" size="5" /> Pitchfork: <input type="text" name="pitchfork" id="pitch" size="5" />

    <br /> Customer Name: <input type="text" name="customer name" size="25" />
    <br /> Shipping Address: <input type="text" name="shipping address" size="25" />
    <br /> State:
    <input type="radio" id="master" name="card" value="master" /><label for="master">MasterCard</label>
    <input type="radio" id="american" name="card" value="american" /><label for="american">American Express</label>
    <input type="radio" id="visa" name="card" value="visa" /><label for="visa">Visa</label>

    <br />

    <input type="reset" value="Reset" />

    <div class="lab">
      <button onclick="regexTest()">Submit</button>
      <button onclick="return false">Cancel</button>
    </div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您的代码存在许多问题,下面我重构了它,使其更易于阅读,因此可行。

验证侦听器应位于表单的提交处理程序上,而不是提交按钮,因为可以在不单击按钮的情况下提交表单。此外,如果您将对表单的引用传递给侦听器,则按名称访问表单控件会更容易。

您应该在提交发生时获取表单控件的值,而不是之前。您的代码在用户完成任何操作之前(可能在表单存在之前)立即获取值,因此将该代码放在侦听器函数中。

最后,正则表达式需要匹配任何不是空格或数字的东西,所以:

/[^\s\d]/

似乎合适。但是,如果字段为空(这些字段不包含非数字或非空格),这仍然允许表单提交。你需要为此添加一个测试。

function regexTest(form) {
  // Get values when the function is called, not before
  var pitch = form.pitchfork.value;
  var chisel = form.chisels.value;
  var saw = form.saw.value;

  // Test for anything that's not a space or digit      
  //  var format = /^(\s*|\d+)$/;
  var format = /[^\s\d]/;

  if (format.test(chisel) || format.test(pitch) || format.test(saw)) {
    // There must be at least one non-space or non-digit in a field
    alert("Repressed Action");
    return false;

  } else {
    alert('Thank you');
    // return false anyway for testing
    return false;
  }
}
<div class="lab">
  <form onsubmit="return regexTest(this)">
    Chisels: <input type="text" name="chisels" id="chis" size="5"><br>
    Saw: <input type="text" name="saw" id="saw" size="5"><br>
    Pitchfork: <input type="text" name="pitchfork" id="pitch" size="5"><br>
    Customer Name: <input type="text" name="customer name" size="25"><br>
    Shipping Address: <input type="text" name="shipping address" size="25">
    <br> State:
    <select name="states">
      <option>Florida</option>
      <option>Georgia</option>
      <option>Alabama</option>
  	</select>
    <br>
    <input type="radio" id="master" name="card" value="master"><label for="master">MasterCard</label>
    <input type="radio" id="american" name="card" value="american"><label for="american">American Express</label>
    <input type="radio" id="visa" name="card" value="visa"><label for="visa">Visa</label>
    <br>
    <input type="reset" value="Reset">
    <div class="lab">
      <button>Submit</button>
      <button onclick="return false">Cancel</button>
    </div>

希望这能让你进入下一步。