正则表达式验证JavaScript中的条件

时间:2016-02-29 13:00:10

标签: javascript regex

我是JavaScript的新手。我试图在if条件下使用正则表达式。 这是我的代码:

var location1 = 3;
var location2 = 4;
var location3 = 5;

var guess;
var hits = 0;
var guesses = 0;
var string = "";
var reg = /[0-6]/i;

var isSunk = false;

while (isSunk == false) {
guess = prompt("Ready, aim, fire! (enter a number 0-6): ");
if (guess != reg || guess ==string) {
    alert("Please enter a valid cell number!");
} else {
    guesses = guesses + 1;

if (guess == location1 || guess == location2 || guess == location3) {

        hits = hits + 1;
        alert("HIT!");

        if (hits == 3) {
            isSunk = true;
            alert("You sank my battleship!");
        }
    } else {
        alert("MISS!");
    }
}
}
var stats = "You took " + guesses + " guesses to sink the battleship, " +    "which means your shooting accuracy was " + (3 / guesses);
alert(stats);`

我的问题出现在if (guess != reg || guess ==string)条件下。它并没有像我预期的那样奏效。我希望函数prompt只允许0,1,2,3,4,5,6个数字,不带任何单词和空格。但实际上如果我输入所需数字之一(例如1),它就不会允许执行进一步的操作。我通过 stackoverflow 阅读了很多关于Javascript(Convert the Regular expressionRegular expressionBasic regular expression)中的正则表达式等等,但我找不到问题的答案。 所以问题是:

  

如果已经声明为变量,如何在JavaScript中的if条件中设置正确的正则表达式?

2 个答案:

答案 0 :(得分:1)

要测试字符串是否与正则表达式匹配,您不能仅使用标准比较运算符对它们进行比较。应该有用的东西是

if (reg.test(guess)) {
    ....
}

正则表达式[0-6]i也匹配字符串"hello1,因为其中有一个。你想要的可能是^[0-6]$。顺便说一句,对于空字符串的测试也是不必要的,因为""与该表达式不匹配。

解释:^$分别匹配字符串的开头和结尾。使用这些符号构造正则表达式实质上表示整个字符串(不仅是子字符串)必须与表达式匹配。

答案 1 :(得分:0)

正则表达式不是正确的工具。

 guess = prompt("Ready, aim, fire! (enter a number 0-6): ");
 guess = +guess;   // Convert *guess* to number, sets to NaN if not numeric
 if (guess >= 0 && guess <= 6) {  // check if number is in range (NaN will fail)
     ....