简单的思路,但是代码比较长,逻辑循环比较简单
while(line=readline()){
var arr = [0,0,0] , num = 0 , num_1 = 0 , YoN = 0
var lines = line.split(' ')
var a = lines[0]
if(a.length>=8){ //密码长度小于八位,错误
str = a.split('')
for(var i=0 ; i<a.length ; i++) //判断是否含有大于2的包含公共元素的子串重复
for(var j=i+3 ; j<a.length-1 ; j++){ //因为大于2,所以至少三个重复字符串才会判错,所以嵌套for循环从i+3开始
if(str[i] == str[j]) //三个重复,将YON的值赋为1,也就是错误
if(str[i+1] == str[j+1])
if(str[i+2] == str[j+2]){
YoN = 1 //赋为1之后立刻跳出两个循环
break
}
if(YoN == 1)
break
}
if(YoN == 0){ //判断包含的字符种类
for(var i=0 ; i<a.length ; i++) //计算A~Z元素的个数,只要有一个,arr[0]为1,代表有大写字母
if( str[i]>='A' && str[i]<='Z' ){
num++
arr[0] = 1
}
for(var i=0 ; i<a.length ; i++) //计算a~z元素的个数,只要有一个,arr[1]为1,代表有小写字母
if( str[i]>='a' && str[i]<='z' ){
num++
arr[1] = 1
}
for(var i=0 ; i<a.length ; i++) //计算0~0元素的个数,只要有一个,arr[2]为1,代表有小写字母
if( str[i]>=0 && str[i]<=9 ){
num++
arr[2] = 1
}
for( i=0 ; i<3 ; i++) //计算大写字母小写字母以及数字的在密码中的总数,如果密码长度大于总数,说明还有其他符号
if(arr[i] == 1)
num_1++
if(num_1 == 3)
console.log('OK')
else if(num_1 == 2)
if( a.length-num > 0 )
console.log('OK')
else console.log('NG')
else console.log('NG')
}
else console.log('NG')
}
else console.log('NG')
}