2014-02-15 141 views
0
function illegal_chr(input) { 
//checks 'entry_box' for illegal characters 
document.getElementById("binary_p").innerHTML = "Convert binary to text or text to binary." 
var entry_value = document.getElementById("entry_box").value; 
var entry_length = entry_value.length 
var CHARACTERS_ARRAY = [] 
var illegal_message_bin = "Please ensure you have only used binary." 
var ILLEGAL_BIN = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "[", "]", "#", "'", ";", ",", ".", "`", "¬", "?", ">", "<", "~", "@", ":", "}", "{", "|", "/", "!", "£", "$", "%", "^", "&", "*", "(", ")", "_", "-", "+", "=", "2", "3", "4", "5", "6", "7", "8", "9"] 

//adds each character to 'CHARACTERS_ARRAY' 
for (var c = 0; c < entry_length; c += 1) { 
    character = entry_value[c]; 

    CHARACTERS_ARRAY.push(character) 
} 

//loops through 'CHARACTERS_ARRAY' checking for any illegal characters 
for (var ch = 0; ch < CHARACTERS_ARRAY.length; ch += 1) { 
    characters = CHARACTERS_ARRAY[ch]; 

    for (var ill = 0; ill < ILLEGAL_BIN.length; ill += 1) { 
     letters = ILLEGAL_BIN[ill] 

     if (characters == letters) { 
      document.getElementById("binary_p").innerHTML = illegal_message_bin; 
     } 

     else if (characters != letters && ch == entry_length) { 
      alert("test") 
     } 
    } 
} 
} 

該函數檢查用戶是否使用了任何「非法字符」,並且該方法有效,但是當它不包含「非法」字符時什麼也沒有發生?否則if語句不運行,即使滿足它的要求?

+0

只是一個提示:在JavaScript中,平等的運算符是'==='而不是'=='。 –

+0

我可以建議一個正則表達式嗎? – Gary

+0

'if(characters!= letters && ch == entry_length)'always' false',因爲'ch'不能等於'entry_length'內循環 – Grundy

回答

1

使用===和!==進行比較。

我的猜測是,你認爲條件已滿足,但JavaScript告訴你它不是。檢查你的假設。

對於regular expression來說,這不是一個簡單的問題嗎?

+0

仍然無法工作,如果發現「非法角色」,它就會起作用,但是當沒有「非法角色」時,什麼都不會發生。 – jabbawabba

+0

您的代碼需要返工。廢棄這個並重新思考。 – duffymo

+0

耶認爲即時通訊只是要做到這一點,謝謝 – jabbawabba

2

僅有的擡頭,可以使用正則表達式,作爲@duffymo指出:

function isHex(str) { 
    return str.match(/^[a-f0-9]{6}$/i) !== null; 
} 

此檢查二進制數(至少一個0或1):

function isBin(str) { 
    return str.match(/^[0,1].*$/) !== null; 
} 
+0

他的角色數組比你在這裏有更多,但它是一個開始。 – duffymo

+0

這實際上會檢查6位數字,因爲您需要將{6}更改爲適當的數字或將其更改爲* –

+0

不是數字位數:查看非法字符數組中的值。 – duffymo

0
if(conditionA){ 
//do something 
} 
else if(conditionB){ 
//do something else 
} 

這大致相當於

if(conditionA){ 
//do something 
} 
**if(!conditionA && conditionB)**{ 
//do something else 
} 

我ñ你的「其他如果條件」這裏它自動意味着滿足條件「字符!=字母」。

else if (characters != letters && ch == entry_length) 

可以因此寫成

else if (ch == entry_length) 

在for循環每次迭代,CH指CHARACTERS_ARRAY的每個元素。假設

  • 你已經輸入的文本ABC在ENTRY_BOX輸入元素

  • 這將意味着,該變量entry_value包含字符串 「ABC」

  • 和ENTRY_LENGTH包含3 [您輸入的文本的長度]

  • 並繼續處理您的代碼,CHARACTERS_ARRAY包含數組['a','b','c']

  • 和CHARACTERS_ARRAY.length也是3


爲循環開始 - 用於循環迭代1:CH包含0 - 用於循環迭代2:CH包含1 - 用於循環迭代3:ch包含2 for循環末端

entry_length它是3,因此永遠不等於變化ch &你永遠不會看到警報。

正如duffymo建議的那樣,使用正則表達式這將是相當直接的!

+0

謝謝,但即使沒有'ch == entry_lengtgh'也沒有任何反應 – jabbawabba

相關問題