我写了一个表单,只有一个输入,只接受波斯语的用户名。在用户第一次按键时,它定义了字符。如果字符不是波斯语,它会阻止输入更多内容并显示错误:“将您的键盘语言更改为波斯语”。效果很好。但问题是,即使键盘语言第一次是波斯语,它也会显示错误,第二次和第三次按键就可以了。我的问题是为什么在按第一个字母时第一次显示错误?
这是我的代码片段:
document.getElementById('my-text').addEventListener('keypress',function(e){
var myText = this.value;
if(!just_persian(myText)){
$("#error-nwl").text("change your keybord language to persian");
this.style.boxShadow = "0px 0px 2px 1px #E25249";
$("#error-nwl").css('color', '#ff6666');
this.value = myText.substring(0, myText.length - 1);
}
else{
$("#error-nwl").text("");
this.style.boxShadow = "0px 0px 0px 0px";
}
});
function just_persian(str){
var p = /^[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF ]+$/;
return p.test(str);
}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<div id="error-nwl"></div>
<form action="" method="post" name="myForm" class="newslside">
<input type="text" placeholder="register-name" id="my-text"/><br/>
<input class="submitnews" type="submit" value="send">
</form>
</body>
</html>
谢谢
最佳答案
当您使用按键事件时,this.value
在您第一次按下某个键时为空。因此,您的 p.test(str)
返回 false。
您可以在按键后测试整个值,即在“keyup”事件上,或者通过将 e.key
传递给just_persian
函数(然后,您可以只使用 /[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF ]/
正则表达式)。
关于javascript - 验证特殊语言的输入框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39852847/