我试图解决这个问题:
ATM机允许4或6位PIN码,PIN码不能包含 除了4位数或正好6位数之外的其他任何东西。
如果函数传递了有效的PIN字符串,则返回true,否则返回 假的。
例如:
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;
}
}
它显示了 - ' a234'错误的输出。 - 预期:错误,而不是:真的---为什么?这个/ [0-9] /只显示数字?
提前谢谢你:)
答案 0 :(得分:2)
/[0-9]/
将匹配字符串中的任何数字,因此它匹配" 2" in" a234"。您需要使其仅匹配数字,从头到尾:/^[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
答案 1 :(得分:0)
查看代码
function validatePIN(pin) {
if (/^(\d{4}|\d{6})$/.test(pin)) {
return true;
} else {
return false;
}
}
console.log(validatePIN("1234"));
console.log(validatePIN("a234"));
console.log(validatePIN("12345"));
console.log(validatePIN("123456"));
说明:
{4} or {6}
\d
代替[0-9]
,这是一个简短的手段^ ... $
指定开头和结尾答案 2 :(得分:0)
因为您没有指定号码所在的位置。
如果你的表达中有一个数字,那么你现在正在检查的是真的。
要纠正这种行为,您需要执行此操作:
/^[0-9]+$/.test(pin)
有了这个,你就是说“数字”应该以数字开头,包含和结尾。
答案 3 :(得分:0)
正如您所看到的,in this regex example /[0-9]/
将匹配任何位置至少包含1个数字的字符串。
相反,你应该使用量词来完全匹配
[0-9]{4}
[0-9]{6}
此外,我们希望这些正则表达式实际匹配整个字符串,在开始时使用^
,在正则表达式结尾使用$
。这将确保匹配的密码旁边不存在任何内容
如果我们将上述2个案例合并到捕获组中,并添加起始分隔符和结束分隔符,我们最终得到此正则表达式:
注意:[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')); // > false
答案 4 :(得分:0)
您只需使用此正则表达式/^(\d{4}|\d{6})$/
来验证pin。
function validate(a){
return /^(\d{4}|\d{6})$/.test(a);
}
console.log(validate('1234'));
console.log(validate('123a'));
console.log(validate('1234a'));
console.log(validate('123412'));
答案 5 :(得分:0)
您可以使用正则表达式
^(?:{4} | {6})(= [0-9] * $?)$
解释
^ # Start of string
(?= # Assert that the following regex can be matched here:
[0-9]* # any number of digits (and nothing but digits)
$ # until end of string ) # (End of lookahead)
(?: # Match either
.{4} # 8 characters | # or
.{6} # 11 characters ) # (End of alternation)
$ # End of string
答案 6 :(得分:0)
JAVA:对照数字数组检查每个PIN码,并相应地填充一个布尔循环。如果最后的布尔循环不是全部为true,则返回false。
public static boolean validatePin(String pin) {
String[] arr1 = pin.split("");
String[] num = {"1","2","3","4","5","6","7","8","9","0"};
boolean[] bool = new boolean[arr1.length];
if(arr1.length != 6 && arr1.length != 4){
return false;
}
for(int i = 0; i< arr1.length; i++){
for(int j = 0; j<num.length; j++){
if(arr1[i].equals(num[j])){
bool[i] = true;
}
}
}
for(int i = 0; i <bool.length; i++){
if(bool[i] == false){
return false;
}
}
return true;
}