密码不应包含用户名或超出两个连续字符的用户全名
如果用户名= 1Abcd234 密码= aBc15 然后它应该返回错误,如密码不能包含用户名的任何部分。
因为" abc1"密码和用户名都有。
答案 0 :(得分:0)
我认为你可以使用这样的东西:
function FindIntersectionFromStart(a,b){
for(var i=a.length;i>0;i--){
d = a.substring(0,i);
j = b.indexOf(d);
if (j>=0){
return ({position:j,length:i});
}
}
return null;
}
function FindIntersection(a,b){
var bestResult = null;
for(var i=0;i<a.length-1;i++){
var result = FindIntersectionFromStart(a.substring(i),b);
if (result){
if (!bestResult){
bestResult = result;
} else {
if (result.length>bestResult.length){
bestResult = result;
}
}
}
if(bestResult && bestResult.length>=a.length-i)
break;
}
return bestResult;
}
var username = "myUsername";
var password = "myuse";
result = FindIntersection(username.toLowerCase(), password.toLowerCase());
if(result.length > 2){
console.log("Invalid Password!");
} else {
console.log("Valid Password!")
}
&#13;
答案 1 :(得分:0)
这是一个简单的方法(虽然可能不是最好的):
username
中不应找到的password
中连续字符的所有组合。这将取决于您的应用程序认为匹配时无效的连续字符数。username
和password
转换为相同的案例。
$("#check").on("click", checkValidity );
function checkValidity(){
var numConsecutiveChars = 2;
var username = $("#username").val().trim().toLowerCase();
var password = $("#password").val().trim().toLowerCase();
// first find all combinations that should not be found in password
var invalidCombinations = [];
for( var i = 0; i < username.length - numConsecutiveChars; i++ ){
var curCombination = username[i] + username[i+1];
invalidCombinations.push( curCombination );
}//for
// now check all invalidCombinations
var invalid = false;
for( var i = 0; i < invalidCombinations.length; i++ ){
var curCombination = invalidCombinations[i];
if( password.indexOf( curCombination ) !== -1 ){
invalid = true;
break;
}
}//for()
if( invalid ){
alert("Invalid password");
}else{
alert("Valid password");
}
}//checkValidity()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="username" value="user" />
<input type="text" id="password" value="pass" />
<button id="check">Check validity</button>