2013-12-11 27 views
1

我試圖確保字符串沒有任何奇怪的ASCII字符。使用正則表達式測試特定ASCII字符的字符串

我試圖使用字符類和否定。

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

所以:00-1F,07之間沒有ASCII字符;或80-A1應該存在。其他一切都應該沒問題。

很久以後我纔回到正則表達式......正則表達式不起作用。我想要一個像「hello」這樣的字符串來傳遞字符串和「†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

問題是? – Jon

+0

編輯使其更清晰 –

+0

@hwnd或'/^[ - 〜] + $ /' – Pointy

回答

1

你需要確保的是,整個字符串匹配\x符號似乎

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

那不給我正確的,這工作時,我嘗試:

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

我試過了。那麼字符串「你好」是假的(不正確,因爲它應該是) –

+0

@JillRenee是的我知道 - 我已經更新了答案。 – Pointy

+0

我更新了小提琴; http://jsfiddle.net/jillrenee42/WE79e/1/它現在通過了一切;包括†ack字符串 –

1

在JavaScript的十六進制代碼是2位數代碼,所以下面將爲您工作:

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

Javascript Regex Reference

+0

是的,或者四位數的'\ u' unicode轉義工作。 – Pointy

+0

是的,用'\ u'取代4位數的'\ uhhhh'表格 – anubhava

0

您希望的範圍的十六進制編碼是不正確的。你要這個,而不是

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

注意我離開了\x07因爲在\x00-\x1f


編輯的範圍是已

由於尖指出,您將需要否定整個串。

+0

仍然不起作用。這是我的JavaScript的問題? –

相關問題