使用正则表达式测试特定ASCII字符的字符串

时间:2013-12-11 15:31:01

标签: javascript jquery regex

我正在尝试确保字符串没有任何奇怪的ASCII个字符。

我正在尝试使用字符类和否定。

 var tester =/[^\x00-\x001F\x007\x080-\xA1]+/i;

所以:00-1F,07之间没有ASCII字符;或80-A1应该存在。其他一切都应该没问题。

经过很长一段时间后我回到正则表达式......正则表达式无效。我想要一个像“你好”的字符串来传递一个字符串,如“†ack!”失败。或者,我的JavaScript / jQuery代码错了吗?

代码:

var tester2 = /^[^\x00-\x1f\x80-\xa1]+$/;
    $('#testButton').click(function(){
        var text1 = $('#ackInput').val();
        console.log("text: " + text1);
        var allowed  = tester2.test(text1);
        var feedback = "allowed?" + allowed;
        console.log(feedback);
        $('#errorTestInputAllowedChars').text(feedback);
    });

jsFiddle上的条目位于http://jsfiddle.net/jillrenee42/WE79e/2/

3 个答案:

答案 0 :(得分:1)

您需要确保整个字符串匹配:

var tester = /^[^\x00-\x001F\x007\x080-\xA1]+$/i;

\x符号对我来说似乎不正确,这在我尝试时有效:

var tester = /^[^\u0000-\u001F\u0080-\u00A1]+$/i;

答案 1 :(得分:1)

在Javascript中,十六进制代码是2位数代码,因此以下内容适用于您:

/^[^\x00-\x1F\x07\x80-\xFF]+$/

Javascript Regex Reference

答案 2 :(得分:0)

您所需范围的十六进制编码不正确。你想要这个

[^\x00-\x1f\x80-\xa1]

注意我遗漏了\x07,因为它已经在\x00-\x1f

的范围内了

修改

正如Pointy指出的那样,你需要否定整个字符串。