使用 Javascript REGEX 阻止特定范围的 ASCII 字符
block a certain ranges of ASCII characters using Javascript REGEX
正如其他人建议的那样"创建白名单",但我真的很想创建一个黑名单。这是我的代码
if($("#txtTag").val().length <=0 || $("#txtTag").val() =="")
{
$("#ep-insert-keyword").html("Please Enter Keyword");
$("#ep-insert-keyword").fadeIn("normal");
}
else if(!RegexCheck(/^[a-zA-Z'_]+$/g,$("#txtTag").val()))
{
$("#ep-insert-keyword").html("Special characters are not allowed");
$("#ep-insert-keyword").fadeIn("normal");
}
我想阻止我的用户输入我在正则表达式中定义的任何特殊字符。我要防止的字符是ASCII中的此字符范围
0-47 58-64 91-96 123-127
我真的很想将我的代码从白名单反转为黑名单......但我不知道怎么做。
我不担心其他语言,因为我真的希望它们通过我的验证......我只想阻止我想要的 ASCII 范围内的字符
虽然我和其他人一起推荐白名单,但以下是您使用正则表达式进行黑名单的方法:
// 0-47 : 00-2F : control codes, spaces, punctuation
// 58-64 : 3A-40 : more punctuation
// 91-96 : 5B-60
// 123-127 : 7B-7F
function verifyChars(str) {
return str.match(/^[^'x00-'x2F'x3A-'x40'x5B-'x60'x7B-'x7F]+$/) != null;
}
这是一个jsFiddle,里面有一堆测试用例:http://jsfiddle.net/jfriend00/24xF7/
或者效率更高一点(因为它只在启动时评估正则表达式一次并使用.test()
):
var verifyChars = (function() {
var re = /^[^'x00-'x2F'x3A-'x40'x5B-'x60'x7B-'x7F]+$/;
return function(str) {
return re.test(str);
}
})();
带有测试用例的jsFiddle:http://jsfiddle.net/jfriend00/fZ3AN/
仅供参考,这里有一个关于如何将不可打印的字符放入正则表达式的良好参考:http://www.regular-expressions.info/characters.html
更多的评论是,其他人几乎涵盖了为什么在这种情况下测试允许的字符可能比测试排除的字符简单得多:
> if($("#txtTag").val().length <=0 || $("#txtTag").val() =="") {
据推测txtTag
是元素(如输入或文本区域)的 ID。在这种情况下,该值是一个字符串,其长度永远不能小于零。另外,空字符串 " 的长度为零,因此它被第一个测试所覆盖,因此上面可以简单地:
if ($("#txtTag").val().length == 0)
然后你有:
> else if(!RegexCheck(/^[a-zA-Z'_]+$/g,$("#txtTag").val())){
您的代码将更有效,因为:
var re = /^[a-zA-Z'_]+$/;
var value = $("#txtTag").val(); // or document.getElementById('txtTag').value
if (value == '') {
// value is blank, do something
) else if (!re.test(value)) {
// value has characters outside the restricted set
}
顺便说一下,如果将元素的默认值设置为"请输入关键字",则可以执行以下操作:
var el = document.getElementById('txtTag');
if (el.value == '') {
// nothing has been entered
el.value = el.defaultValue; // reset to 'Please enter keyword"
} else if (...) {
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- jquery日期选择器年份范围默认值
- Jpgraph:如何手动设置X轴和Y轴的范围
- 在对象数组中查找多个值的d3范围
- 动态加载angularjs并生成控制器和范围
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- ascii输入键通过firefox中的javascript返回0
- 在Materialize Calendar中设置年份范围
- 在MVVM视图模型中处理应用程序范围的元素
- setInterval游戏循环的范围问题
- AngularJS获取范围中的选定项目
- 从指定范围创建字符数组
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- ngDialog-弹出窗口未更新范围变量
- 使用 Javascript REGEX 阻止特定范围的 ASCII 字符