我是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 expression,Regular expression,Basic regular expression)中的正则表达式等等,但我找不到问题的答案。
所以问题是:
如果已经声明为变量,如何在JavaScript中的
if
条件中设置正确的正则表达式?
答案 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)
....