我正在制作一个只有两个值的自定义注册页面,电子邮件和密码,稍后我还将添加确认密码,对于我的密码字段,我有一些限制,我使用了一些正则表达式和一些定制代码来制作验证。
这是我的validateField:
validateField(fieldName, value) {
let fieldValidationErrors = this.state.formErrors;
let emailValid = this.state.emailValid;
let passwordValid = this.state.passwordValid;
//let passwordValidConfirm = this.state.passwordConfirmValid;
switch(fieldName) {
case 'email':
emailValid = value.match(/^([\w.%+-]+)@([\w-]+\.)+([\w]{2,})$/i);
fieldValidationErrors.email = emailValid ? '' : ' is invalid';
break;
case 'password':
passwordValid = (value.length >= 5 && value.length <= 32) && (value.match(/[i,o,l]/) === null) && /^[a-z]+$/.test(value) && this.check4pairs(value) && this.check3InRow(value);
fieldValidationErrors.password = passwordValid ? '': ' is not valid';
break;
default:
break;
}
this.setState({formErrors: fieldValidationErrors,
emailValid: emailValid,
passwordValid: passwordValid,
//passwordValidConfirm: passwordValidConfirm
}, this.validateForm);
}
如您所见
passwordValid
我已经制定了一些方法
check3InRow
没有按照我希望的方式工作,这可以确保您的字符串中至少有3个连续的字母,例如“ abc”,“ bce”或“ xyz”。
check3InRow(value){
var counter3 = 0;
var lastC = 0;
for (var i = 0; i < value.length; i++) {
if((lastC + 1) === value.charCodeAt(i)){
counter3++;
if(counter3 >= 3){
alert(value);
return true;
}
}
else{
counter3 = 0;
}
lastC = value.charCodeAt(i);
}
return false;
}
这不能正常工作,因此应该接受:
aabcc
作为密码,但不是:
aabbc
答案 0 :(得分:1)
您要从0开始计数,并寻找大于等于3的值,对于连续3个字符,该值永远不会为3。用代码休息一切就可以了。
@id="year"
答案 1 :(得分:0)
我们不能做那个功能的简单版本吗?喜欢
<div class="row">
<div class="col-md-12" [style.background]="color" id="newArea" (drop)="drop($event)" (dragover)="allowDrop($event)" [style.background]="color1" style=" padding: 10px; min-height: 550px;">
</div>
</div>
我的意思是说复杂度为O(N),所以我们可以尝试一下
还要添加您的函数。当您是一个字符时,应该考虑使用1作为计数器。因为如果另一个匹配,它将是2个连续值。
function check3InRow2(value){
for (var i = 0; i < value.length-2; i++) {
const first = value.charCodeAt(i);
const second = value.charCodeAt(i+1);
const third = value.charCodeAt(i+2);
if(Math.abs(second - first) === 1 && Math.abs(third-second) === 1){
return true;
}
}
return false;
}