【问题标题】:username is not a part of password and vice versa javascript or jquery用户名不是密码的一部分,反之亦然 javascript 或 jquery
【发布时间】:2017-10-13 05:04:59
【问题描述】:

密码不应包含超过两个连续字符的用户名或用户全名部分

如果用户名= 1Abcd234 密码= aBc15 那么它应该返回错误,例如密码不能包含用户名的任何部分。

因为“abc1”同时出现在密码和用户名中。

【问题讨论】:

  • 到目前为止你尝试过什么?请分享您的代码。
  • 你做了什么,请注意 StackOverflow 不是编码服务
  • 循环遍历并使用 indexof
  • 你能告诉我如何在 indexof 中循环。
  • 我使用这个代码函数 check(user,pswd){ use= user.toLowerCase(); pwd=pswd.toLowerCase(); var value= (pwd.match(/[a-z]+/ig).filter(a=> a.length > 1 && use.includes(a)).length > 0);返回值; } if(check("abcdefgh","abc1")==true){ alert('true'); } 其他 { 警报('假');但是,如果我使用像 abcsfgh 这样的用户名,那么它会返回 false。

标签: javascript jquery


【解决方案1】:

我认为你可以使用这样的东西:

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!")
}

【讨论】:

  • 抱歉,如果我使用这个 var username = "myUsername"; var密码=“我的使用”;它将返回有效密码。
  • @NishuKashyap 发生这种情况是因为情况不同。通过添加 .toLowerCase() 您的示例有效。
  • 对不起,你不明白我的意思。如果 myUsername 和 myuse 都具有相同的字符串,即 myuse 那么如何返回有效密码。
  • @NishuKashyap 我更新了代码以满足您的示例。再试一次。
  • 非常感谢。现在它对我来说很好。 @德里克·布朗
【解决方案2】:

这是一个简单的方法(虽然可能不是最好的):

  1. 首先从username 中获取不应在password 中找到的所有连续字符组合。这取决于您的应用程序在匹配时认为无效的连续字符数。
  2. 现在,运行一个简单的循环并使用String.indexOf 方法检查是否存在任何无效组合。
  3. 为简单起见,请确保将 usernamepassword 都转换为相同的大小写。

$("#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>

【讨论】:

  • 是的,这段代码也有效。非常感谢。 @mohit bhardwaj
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2019-10-20
  • 2019-01-16
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
相关资源
最近更新 更多