我正在尝试解决此任务:
ATM 机允许 4 位或 6 位 PIN 码,PIN 码只能包含 4 位或 6 位数字。
如果函数传递了一个有效的 PIN 字符串,则返回 true,否则返回 false。
例如:
validatePIN("1234") === true validatePIN("12345") === false validatePIN("a234") === false
这是我的代码:
function validatePIN (pin) {
if(pin.length === 4 || pin.length === 6 ) {
if( /[0-9]/.test(pin)) {
return true;
}else {return false;}
}else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
它表明 --- 'a234' 的输出错误 - 预期:false,而不是得到:true ---为什么?这个 /[0-9]/ 只显示数字?
先感谢您 :)
正如您在此正则表达式示例中 /[0-9]/所看到的,它将匹配其中任意位置至少包含 1 个数字的任何字符串。
要解决此问题,您可以使用量词来完全匹配
[0-9]{4}[0-9]{6}此外,我们希望这些正则表达式实际上匹配整个字符串,^在正则表达式的开头和$结尾使用。这将确保匹配的 PIN 码旁边不存在任何内容。
如果我们将上面的两种情况合并到一个捕获组中,并添加开始和结束分隔符,我们最终会得到以下正则表达式:
注意:[0-9]字符集有一个很好的简写:\d,因此正则表达式可以进一步简化为:
/^(\d{4}|\d{6})$/
这个正则表达式执行您需要的所有验证,因此您的代码validatePIN可以简化如下:
function validatePIN (pin) {
return /^(\d{4}|\d{6})$/.test(pin);
}
console.log(validatePIN('1234')); // > true
console.log(validatePIN('123456')); // > true
console.log(validatePIN('123')); // > false
console.log(validatePIN('12345')); // > falseRun Code Online (Sandbox Code Playgroud)
/[0-9]/将匹配字符串中的任何数字,因此它匹配“a234”中的“2”。你需要让它从头到尾只匹配数字:/^[0-9]+$/或/^\d+$/
此外,您可以仅使用正则表达式/^(\d{4}|\d{6})$/来匹配包含 4 或 6 个数字的所有字符串。
/^(\d{4}|\d{6})$/.test("1234"); // true
/^(\d{4}|\d{6})$/.test("12345"); // false
/^(\d{4}|\d{6})$/.test("123456"); // true
/^(\d{4}|\d{6})$/.test("a234"); // false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15123 次 |
| 最近记录: |