2016-07-03 153 views
2

任務: ATM機允許4或6位密碼和PIN碼不能包含任何東西,但正是4位數字或精確6位數字。 如果該函數傳遞了有效的PIN字符串,則返回true,否則返回false。簡單PIN驗證

我的解決辦法:

function validatePIN (pin) { 
    //return true or false 
    if (!isNaN(pin) && Number.isInteger(pin) && pin.toString().length == 4 || pin.toString().length == 6) { 
    return true 
    } else { 
    return false 
    } 
} 

我得到的唯一錯誤是當我通過4位數字作爲字符串("1234") - 它等於false

+1

添加爲函數的第一行:'銷=號碼(PIN);' – BadIdeaException

+1

好吧,不是唯一的錯誤 - 它也返回真正的字符串,如「1234ab」。 – JJJ

+0

'!isNaN(pin)'---這個檢查沒有任何意義。 – zerkms

回答

2
function validatePIN (pin) { 
    // return true or false 
    if (typeof pin === "string" && !~pin.indexOf('.') && !isNaN(Number(pin)) && (pin.length === 4 || pin.length === 6)) { 
    return true; 
    } else { 
    return false; 
    } 
} 

編輯:

現在只接受一個字符串,而 「1234.0」 失敗。

EDIT2:

0000和000000成功,但也許不是最完美的解決方案:)

EDIT3:

增加了一個更短的例子,通過GingerPlusPlus建議。

function validatePIN (pin) { 
    // return true or false 
    return typeof pin === "string" && !~pin.indexOf('.') && !isNaN(Number(pin)) && (pin.length === 4 || pin.length === 6); 
} 
+1

你讀過整個問題? – zerkms

+0

^現在重新讀它與思想,謝謝。 – b00t

+0

@ b00t,嘗試'0000'或'000000' - 它等於'FALSE' – Archie

0

可以使用Array.prototype.every()Array.prototype.some()String.prototype.match()

<input type="text" /> 
 
<button>validate pin</button> 
 
<script> 
 
    var validatePIN = (args) => {[...args] = args; 
 
return args.every(v => v.match(/\d/)) && 
 
    [4, 6].some(n => args.length === n)}; 
 

 
    document.querySelector("button") 
 
    .addEventListener("click", (e) => 
 
    alert(validatePIN(e.target.previousElementSibling.value)) 
 
) 
 
</script>

+1

如果你使用'.mat ch()'爲什麼不用一個正則表達式驗證整個PIN? @nnnnnn你是正確的(而且,不'.match()'返回null如果不匹配,從而導致一個錯誤,當你嘗試檢查長度?) – nnnnnn

+0

。只是一個可選的方法。通過zerkms的'RegExp'應該返回預期的結果。 – guest271314

+0

那麼這是一個有趣的看待它的方式。 – nnnnnn

1
function validatePIN(pin) { 
var isNumber = /^\d+$/.test(pin) && (pin.length == 4 || pin.length == 6) 
return isNumber 
} 

validatePIN('0193') 

//returns true