2013-11-09 53 views
-2

如何讓JS忽略所有不是字母的東西(例如abc ...)而不使用正則表達式讓JavaScript忽略所有不是字母的信息

Examples 
match("abcdef","@C2D!") returns true 
match("abcdef","CAfe") returns true 
match("abcdef","CG") returns false 

這是我到目前爲止已經完成了...

function match(string, pattern) { 
    string = string.toLowerCase(); 
    pattern = pattern.toLowerCase(); 
    for (var i = 0, l = string.length; i < l; ++i) { 
     if(pattern.indexOf(string[i]) === -1) return false; 
    } 
    return true; 
} 
alert(match("abcdef", "@C2D!")); 

小提琴這裏:http://jsfiddle.net/5UCwW/

+0

http://stackoverflow.com/q/3073176/1636522,你的情況:!'/^[A-ZA-Z] + $ /測試( '@ C2D!')'。 – leaf

+2

我覺得很難理解這個要求。字符串值'abcdef'總是由字母組成,它看起來與您傳入的任何模式都不匹配。您是否可以詳細說明該需求? –

+0

是否有可能沒有正則表達式 – theshizy

回答

1

使用正則表達式,如下列[^A-Za-z]

var re = /[^A-Za-z]/g; 

function match(string, pattern) { 
    string = string.toLowerCase(); 
    pattern = pattern.toLowerCase().replace(re, ""); 
    for (var i = 0, l = string.length; i < l; ++i) { 
     if(pattern.indexOf(string[i]) === -1) return false; 
    } 
    return true; 
} 

作爲不REG離的函數

var sanitize = function (str) { 
    var newStr = "", i, charCode; 

    for (i = 0; i < str.length; ++i) { 
    charCode = str.charCodeAt(i); 
    if (charCode >= 65 && charCode <= 90 || 
     charCode >= 97 && charCode <= 122) { 
     newStr += str[i]; 
    } 

    return newStr; 
} 

編輯:A-Z採用從資本到小情況下z的ASCII值的範圍內。因此這包括],\,[,^,_和`。我沒有意識到這一點,[A-Za-z]是正確的模式。

+0

它可以放在函數中嗎? – theshizy

+0

'\ w'包含數字和下劃線; OP在提到的問題中沒有任何地方提到這些不應該被忽視。另外,'[^ \ w]'與'\ W'相同。 – raina77ow

+0

Yupp你們是誰,糾正我的答案,以反映它。 –

1

使用JavaScript的內置的字符串匹配方法:

var mystring = '@C2D!'; 
mystring.match(/[^a-zA-Z]/gi).length returns true 

var mystring2 = 'abcdef'; 
mystring2.match(/[^a-zA-Z]/gi).length returns false 

我假設你正在尋找較低和大寫字母。如果降低,請使用[^ a-z]。

有關匹配方法的詳細信息,請瀏覽: http://www.w3schools.com/jsref/jsref_match.asp

+1

不需要使用'match ... length'; '測試'足夠好。 – raina77ow

+0

不使用正則表達式可以完成嗎? – theshizy