2016-02-29 32 views
-1

我是JavaScript新手。我試圖在if條件下使用正則表達式。 這裏是我的代碼:使用JavaScript驗證條件的正則表達式

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

你需要根據它的值測試你的正則表達式,http://www.w3schools.com/jsref/jsref_regexp_test.asp –

+1

'guess!= reg'在這裏你比較一個用戶字符串和正則表達式對象;這是不正確的,你需要'reg.test(guess)'你還需要錨定正則表達式'/^[0-6] $ /'使它匹配1位數字 –

+0

Murtaza,實際上,我已經完成了這裏http://www.regexr.com和一切都很好 – fuser

回答

1

要測試字符串是否與正則表達式匹配,您不能僅使用標準比較運算符來比較它們。東西應該工作

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

而且正則表達式[0-6]i也匹配字符串"hello1,因爲有一個在裏面。你想要的可能是類似於^[0-6]$。順便說一句,空字符串的測試也是不必要的,因爲""與該表達式不匹配。

解釋:^$分別與字符串的開頭和結尾匹配。用這些符號構造一個正則表達式基本上說,整個字符串,不僅是一個子字符串,必須匹配表達式。

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) 
    ....