javascript - 验证特殊语言的输入框

标签 javascript jquery html css regex

我写了一个表单,只有一个输入,只接受波斯语的用户名。在用户第一次按键时,它定义了字符。如果字符不是波斯语,它会阻止输入更多内容并显示错误:“将您的键盘语言更改为波斯语”。效果很好。但问题是,即使键盘语言第一次是波斯语,它也会显示错误,第二次和第三次按键就可以了。我的问题是为什么在按第一个字母时第一次显示错误?

这是我的代码片段:

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/

相关文章:

javascript - 如何处理点击和焦点事件来切换?

javascript - JQuery ScrollTop() 适用于窗口事件,但不适用于 div(在 chrome 中测试)

javascript - 在 JavaScript 中更改 DIV 类样式

javascript - 防止关闭剑道上下文菜单中的子菜单,直到用户将鼠标悬停在另一个菜单项上或单击外部/另一个菜单项

javascript - 将值传递给隐藏字段并提交给 CodeIgniter

javascript - 当用户点击目标 div 时只显示必要的 div

html - 将文本置于图像左上角,顶部和左侧偏移百分比

javascript - 如何使用脚本在小部件中执行循环脚本?

Javascript - 如何将用户输入附加到表单中的新列表项。 (如何添加记录)

javascript - AMP 广告 : How to configure dynamic DFP key-value in json property