2012-03-19 77 views
1

我想創建一個從文本輸入框中的輸入搜索引擎友好的鏈接。當光標離開輸入時,我會在blur事件中這樣做。我可以讓輸入中的文本出現在所需的輸入中(對於鏈接),但我的鏈接不是連字符,而且特殊字符也不能用連字符替換。我正在嘗試執行全局字符串替換,但表達式需要一個字符串,而不是一個變量。至少從我所知道的。此外,我找不到一個更好的方法來匹配特殊字符的列表,而不是數組和循環。有人可以幫忙嗎?我的願望是創建這樣的鏈接:http://domain.com/this-is-my-link。這裏是我的代碼:jQuery/JS:如何創建一個搜索引擎友好的鏈接

$('#title').blur(function() { 
     var hyphenated; 
     hyphenated = urlTitle($(this).val());    
     $('#link').val(hyphenated);  
}); 


function urlTitle(text) {  
    var characters = [' ', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '+', '=', '_', '{', '}', '[', ']', '|', '/', '<', '>', ',', '.', '?', '--']; 

    for (var i = 0; i < characters.length; i++) { 
     var char = String(characters[i]); 
     text = text.replace(/char/g, '-'); 

}   
    text = text.toLowerCase(); 
    return text; 
} 
+0

搜索引擎是否執行客戶端代碼? – Amberlamps 2012-03-19 15:39:28

+0

我正在創建一個工具,以便我們的經銷商可以使用我們的CMS創建鏈接到他們的文章鏈接。該鏈接不會被客戶端執行 – sehummel 2012-03-19 15:41:03

回答

3

問題在於你避開功能:

text = text.replace(/char/g, '-'); 

字面上符合 「焦炭」。所以如果你給它I'm building a string out of chars,it will returni'm building a string out of -s

如果要使用變量動態構建正則表達式,則需要使用字符串和RegExp constructor構建它。

text = text.replace(new RegExp("\\" + char, "g"), '-'); 

注意,使用這種格式時,你不需要指定定界字符(向前前後斜槓),並且該標誌作爲第二個參數傳遞給構造函數。我還在前面添加了一個反斜槓來轉義您可能要替換的特殊字符。

Live example

+0

完美。謝謝,Xeon06。 – sehummel 2012-03-19 15:51:49

+0

我將如何刪除任何尾隨連字符? – sehummel 2012-03-19 15:55:54

+0

@ shummel7845你可以使用[這些修剪功能](http://www.webtoolkit.info/javascript-trim.html)。 [現場示例](http://jsfiddle.net/pNcVc/2/) – 2012-03-19 17:42:22

0

不能在正則表達式文字使用的變量名這樣的,(/炭/)。可以使用具有正確轉義值的RegExp對象,或者製作一個匹配所有要替換的字符的正則表達式字面值。

0

我的作品是這樣一個版本:

function urlTitle(text) { 
    var removeRe = /[^\w\s]/ig, 
     spacesRe = /[\s]/ig; 
    return text.toLowerCase().replace(removeChars, '').replace(spaceChars, '-'); 
} 

這有一個弱點雙空格都變成了雙「-'s。這可以改進與另一個正則表達式。