2010-11-10 50 views
0

喜所有JavaScript的失敗 - 正則表達式的錯誤

我有這樣的代碼

function prototype(str , id) 
{ 
    var ret = str; 

    ret = ret.replace(/ø/g, 'oe'); 
    ret = ret.replace(/Ø/g, 'OE'); 
    ret = ret.replace(/å/g, 'aa'); 
    ret = ret.replace(/Å/g, 'AA'); 
    ret = ret.replace(/æ/g, 'ae'); 
    ret = ret.replace(/Æ/g, 'AE'); 

    document.getElementById(id).value = ret.replace(/[^a-zA-Z0-9\/\_-]/i,'_').replace(/_+/g,'_'); 
} 

我的問題是現在,如果我用這樣的詞(demo demo demo)它沒關係使這個字(demo_demo demo

我使用此功能來逃避網址。接下來我需要將它發送給小寫字母,完成後我希望有所幫助:)

坦克很多。

+1

確定一個Unicode圖表,但是當你的代碼失敗在哪裏和? – 2010-11-10 12:37:54

+0

我不完全確定你在問什麼。你的腳本有什麼問題? – 2010-11-10 12:38:44

回答

2

你忘了貪婪的修飾語

/[^a-zA-Z0-9\/\_-]/i 

....

/[^a-zA-Z0-9\/\_-]/ig 
+1

's/greedy/global /' – adamse 2010-11-10 12:58:40

2

如果問題僅第一空間獲取與_代替,那麼你需要把g選項到正則表達式替換。

ret.replace(/[^a-zA-Z0-9\/\_-]/gi,'_') 

打開字符串小寫使用串的

toLowerCase()方法。

1

假設你的第一個要求就是更換空間,+, - 用下劃線字符,

document.getElementById(id).value = ret.replace(/[^a-zA-Z0-9\/\_-]/ig,'_').replace(/_+/ig,'_'); 

其它要求是使小寫的字符串,

document.getElementById(id).value = document.getElementById(id).value.toLowerCase(); 
0

主要的潛在問題,我看,正在進行首次更換(在Ø和其他斯堪的納維亞字符上)。

您應該使用unicode char表示法進行更改,例如,這種說法

ret = ret.replace(/Ø/g, 'OE'); 

應該

ret = ret.replace(/\u0153/g, 'OE'); 

其他音調符號標誌只是找到像http://www.chucke.com/entities.html