2010-11-10 19 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