我正在尝试为名称字段编写正则表达式并阻止所有特殊字符
JS小提琴:https://jsfiddle.net/69mqhzq6/
但是,我的代码似乎忽略了它。有人能说出我做错了吗?
Marshal.FreeGlobal
答案 0 :(得分:1)
您只需枚举特殊字符,而无需创建在edit_project_task_path(@project, @task)
的帮助下定义的字符类。
我建议使用正则表达式文字,其字符类与其中定义的任何符号相匹配:
[...]
请注意,var blockSpecialRegex = /[~`!@#$%^&()_={}[\]:;,.<>+\/?-]/;
应位于字符类的开头/结尾,以表示文字-
符号。必须对-
内部进行转义,但不必转义]
。 [
必须转义,因为它是正则表达式分隔符。
JS代码:
/
$('input').on('keypress', function (e) {
var blockSpecialRegex = /[~`!@#$%^&()_={}[\]:;,.<>+\/?-]/;
var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
console.log(key)
if(blockSpecialRegex.test(key) || $.isNumeric(key)){
e.preventDefault();
return false;
}
});
答案 1 :(得分:1)
为什么不使用正则表达式只允许使用字母,数字和空格(如果需要) ^ [A-Za-z0-9] * $
答案 2 :(得分:0)
使用构造函数时,正常的字符串转义规则(在字符串中包含\的特殊字符前面)是必要的。
所以你需要这样做:
var blockSpecialRegex = new RegExp("[~`!@#$%^&()_={}\\[\\]\\:;,\\.\\/<>\\\\*\\-+\\?]");