我试图进行简单的输入字段验证以限制一些特殊字符,我得到了以下解决方案。
但我无法理解这个三元运算符中发生了什么事情{{{ 1}}
任何人都可以解释一下吗?
var str = String.fromCharCode(e.charCode ? e.which : e.charCode);

$(document).ready(function(){
$('#textarea').keypress(function (e) {
var regex = new RegExp("^[a-zA-Z0-9 ,.!?]+$");
var str = String.fromCharCode(e.charCode ? e.which : e.charCode);
if (regex.test(str)) {
return true;
}
else {
alert("enter only valid string(123 abc , . ! ?)");
e.preventDefault();
return false;
}
})
});

答案 0 :(得分:1)
String.fromCharCode
将Unicode编号转换为字符。
var regex = new RegExp("^[a-zA-Z0-9 ,.!?]+$");
它是一个正则表达式,用于检查输入的密钥是来自字母或数字还是句号,还是逗号或者!。
String.fromCharCode(e.charCode ? e.which : e.charCode);
这会返回按键的键控代码或字符代码。
例如:var res = String.fromCharCode(65);
返回A
if (regex.test(str)) {
检查是否接受按下的按键。
答案 1 :(得分:1)
更好的解决方案是将此字符验证绑定到更多事件。
为了兼容浏览器,请在所有可能的事件属性中查找字符代码。
我为 Enter 添加了一个例外,因为它是textarea
,用户可能想要更改行。
$(document).ready(function(){
$('#textarea').on("keypress paste",function (e) {
var regex = new RegExp("^[a-zA-Z0-9 ,.!?]+$");
var charCode = e.which || e.charCode || e.keyCode;
if(charCode!=13){ // to allow [ENTER]
var str = String.fromCharCode(charCode);
if (regex.test(str)) {
return true;
}
else {
alert("enter only valid string(123 abc , . ! ?)");
e.preventDefault();
return false;
}
}
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class="col-xs-12">Reason<span class="requiredField">*</span></label>
<textarea id="textarea" rows="2"></textarea>