2017-04-12 67 views
0

如何一次检查多个变量输入以确保正则表达式正常工作?每次我输入任何内容时,表单都会提交并且不会提醒任何事情。无法从服务器验证用户输入是否正确?

我已经试过正则表达式验证测试()方法也和仍然没有运气。

我试图验证具有以下的正则表达式,使到什么地方是不是数字或空格被认为是一个错误的输入用户输入。

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>

+0

对我来说,正则表达式应该是'/ [^ \ s \ d] /',它会匹配任何不是数字或空格的东西。如果您打算发布HTML,请不要包含PHP,请发布实际的可运行代码。 – RobG

+0

@RobG我相信你的解决方案是正确的。 –

+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> 
 
    \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文件,所以我必须更改

back –

相关问题