2017-07-18 89 views
1

我正在研究一個JS練習,它的工作原理是半工作,但是當最後一個條件滿足時,它不會返回一個語句,只有一個空的括號集合。我不太清楚爲什麼,但任何幫助表示讚賞!字符串返回語句JS

function isItANum(str) { 
    var phonenum = str.replace(/[^0-9]+/g,""); 

    if(str.length===11 && str.indexOf(0)===0) { 
    str = str; 

    } else if (str.match(/[a-z]/i)) { 
    str = phonenum; 

    } else { 
    str = "Not a phone number"; 
    } 

    return str; 
} 

isItANum("hey"); 

回答

2

只需按順序逐步進行計算。

首先,在hey沒有數字,所以變量phonenum被用空字符串替換,當它到達str.replace(/[^0-9]+/g, "");

其次,您檢查長度是否爲11,並且如果第一個字符不是0。這失敗了,所以它進入else if

第三,hey與正則表達式/[a-z]/i相匹配,因此str設置爲phonenum

四,str(現在的phonenum)被返回,並且是一個空字符串。

要實際返回"Not a phone number",只需完全刪除else if;非數字已被第一個正則表達式剝離。這樣,當if失敗時,它將直接進入else。您可以在相同的條件下組合長度並開始0驗證。

請注意,您可能實際上正在尋找正則表達式/^[a-z]/i以確保它只包含小寫字符(注意起始克拉)。而對於它的價值,第一個if的計算是不必要的,因爲str已經完全等於str

這可以被重新寫成如下:

function isItANum(str) { 
 
    var phonenum = str.replace(/[^0-9]+/g,""); 
 
    if (str.length === 11 && str.indexOf(0) === 0 && str.match(/[^a-z]/i)) { 
 
    str = phonenum; 
 
    } else { 
 
    str = "Not a phone number"; 
 
    } 
 
    return(str); 
 
} 
 

 
console.log(isItANum("hey")); 
 
console.log(isItANum("111111111")); 
 
console.log(isItANum("01111111111"));

希望這有助於! :)

+0

嘿,謝謝!這真的有幫助!我很感激:) – grasshopper

+0

太棒了!很高興聽到這個解決方案似乎幫助你。一旦您確認此解決方案解決了您的問題,請不要忘記通過單擊表決按鈕下方的灰色檢查標記解決方案爲正確的 - 這會將其從「未答覆的問題」隊列中移除,並將聲譽評爲兩個提問者和問題回答者。當然,在說,你沒有義務標記我的答案(或任何其他答案)是正確的,但它確實有助於保持StackOverflow上的事情順利進行:) –

0

在第二個如果,變量str已經等於「」。因此如果str沒有任何數字並且str的值等於「」,那麼您需要添加另一個數字,而不是電話號碼。

function isItANum(str) { 
 
var phonenum = str.replace(/[^0-9]+/g,""); 
 

 
if(str.length===11 && str.indexOf(0)===0) { 
 
str = str; 
 
} 
 
else if (str.match(/[a-z]/i)) { 
 
    str = phonenum; 
 
} 
 

 
if (str === '') { 
 
    str = "Not a phone number"; 
 
} 
 
console.log(str); 
 
return str; 
 
} 
 

 
isItANum("hey");