2013-05-09 35 views
0

我做了这个随机数猜测游戏使用PHP,我试图用JavaScript实现客户端表单验证。该脚本应该只允许1-100之间的数字,并拒绝其他所有内容,如空格,字母数字字符,负数和浮点数,和/或这些的组合。这里的脚本到目前为止我有:JavaScript的正则表达式验证失败

<script type="text/javascript"> 
//<![CDATA[ 

// The checkForm() function makes sure the user's guess is valid 
function checkForm() { 
    var numericExpression = /[-+]?([0-9]*\.)?[0-9]+/; // Code is from regular-expressions.info 
    if (document.getElementById("userGuess").value.match(numericExpression)) { 
     return true; 
     } // ends the if statement 
    else { 
     alert("Enter a valid number between 1-100 that isn't negative or a decimal value"); 
     document.getElementById("userGuess").focus(); 
     return false; 
    } // ends the else statement 
} 
//]]> 
</script> 

而这里的形式:

<div id="container"> 
    <h1 id="mainHeading">Let's play a game!</h1> 

    <h2 id="subHeading">I'm thinking of a number between 1-100. Take a guess on what you think it is.</h2> 

    <!-- User input --> 
    <form action="" method="post" onsubmit="return checkForm()" name="formGuess" id="formGuess"> 
     <input type="text" name="userGuess" id="guessInput" /> 
     <button type="submit" id="submit">You're probably going to get it wrong.</button> 
    </form> 
</div> <!-- End container div --> 

如同预期它不工作,只拒绝纯粹的字母输入。任何其他混合和脚本不起作用。我有网页上传到我的个人网站:PHP random number game

谢谢!

+3

要检查从1号-100,你不需要正则表达式。 – elclanrs 2013-05-09 22:21:21

回答

0

虽然我与你并不真的需要一个正则表达式的同意其他人,如果你想知道的正则表达式应该怎么看起来像一个号码(其真的是1和100之间的字符串,因为你使用正则表达式),这里是一个方法:/^[1-9]$|^[1-9][0-9]$|^100$/

让我知道是否有帮助,或者如果您有任何疑问:)

+0

为什么不允许007?或“007”? – RobG 2013-05-09 22:52:54

+0

哦太棒了,非常感谢你!我试图理解你现在所做的这个正则表达式。所以如果我正确理解这个,这个正则表达式允许1-9中的任何一个数字,而不是别的;或两位数字,第一位数字为1-9,第二位数字为0-9(实际允许1-99);或者仅仅是100.在开始和结束时^和$使得它在前后都不会出现。是对的吗? o: – iBringDaLULZ 2013-05-10 01:14:41

+0

@iBringDaLULZ是的,你钉了它:) – asifrc 2013-05-10 04:04:26

2

你不需要正则表达式。要检查是否变量是一个数字使用:

var isNumber = (! isNaN(variable)); 
+0

为什么外括号? – elclanrs 2013-05-09 22:24:38

+0

只是个人喜好。 – 2013-05-09 22:25:40

+0

我试图熟悉正则表达式,这就是为什么我这样做。尽管谢谢您的帮助! – iBringDaLULZ 2013-05-09 23:32:53