无法从服务器验证用户输入是否正确?
问题描述:
如何一次检查多个变量输入以确保正则表达式正常工作?每次我输入任何内容时,表单都会提交并且不会提醒任何事情。无法从服务器验证用户输入是否正确?
我已经试过正则表达式验证测试()方法也和仍然没有运气。
我试图验证具有以下的正则表达式,使到什么地方是不是数字或空格被认为是一个错误的输入用户输入。
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>
答
有许多的问题与您的代码,下面我重构它有点更容易阅读等有用。
验证监听器应该位于表单的提交处理程序中,而不是提交按钮,因为可以在不单击按钮的情况下提交表单。另外,如果将表单的引用传递给侦听器,则通过名称访问表单控件会更容易。
你应该得到的表单控件的值时,提交发生,而不是之前。你的代码在用户完成任何事情之前(甚至可能在表单存在之前)立即获取这些值,因此将该代码放入侦听器函数中。
最后,正则表达式需要匹配任何不是空格或数字,所以:
/[^\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>
\t </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>
希望这可以让你的下一个步骤。
+0
谢谢你的帮助!我必须注意到,我必须保持表单在提交时发送到php文件,所以我必须更改
对我来说,正则表达式应该是'/ [^ \ s \ d] /',它会匹配任何不是数字或空格的东西。如果您打算发布HTML,请不要包含PHP,请发布实际的可运行代码。 – RobG
@RobG我相信你的解决方案是正确的。 –
它部分工作。如果我将所有三个输入作为数字,它就可以工作。但是,如果我让他们中的一个成为一封信,它仍然有效。我会继续尝试。 –