2014-12-05 59 views
0

我有一個title字符串,它來自我的用戶將提交的表單。我希望以任何方式採取title,並將其格式化爲標題大小寫,我相信它是最易於閱讀的方式。將字符串轉換爲各種格式

alexis Sanchez -> Alexis Sanchez 
sanchez's ball -> Sanchez's Ball 
sanchez and co -> Sanchez and Co 

我也想借此像「和」或「或」,讓他們爲小寫,就如上圖所示。這可能嗎?

另外,在某些場合,我想採取這個title並過濾它,所以它忽略任何特殊字符,如撇號,並用破折號分隔它。這將用於URL(即.com/sanchezs-ball)。

alexis Sanchez -> alexis-sanchez 
ALEXIS Sanchez -> alexis-sanchez 
sanchez's ball -> sanchezs-ball 

我創建了兩個函數,幾乎可以做到這一點。我只是需要一些建議,以便如何調整它們以使其達到我想要的格式。

這一個需要我的title並把它變成一個類似URL的字符串。這可以改進/縮短嗎?

function hashifyString(dirtyString) { 
    var title = dirtyString 
    .replace(/[^a-z0-9\s]/gi, '') 
    .replace(/\b\w+/g,function(s){return s.substr(0).toLowerCase();}) 
    .replace(/[_\s]/g, '-'); 
    return title; 
} 

我需要就如何在這一個改進了一些建議,所以它看起來出去「和」或「或」並保持,同時保持字符串首字母大寫的其餘字母小寫這兩個詞?

function beautifyString(dirtyString) { 
    var string = dirtyString 
    .replace(/[^a-z0-9\s]/gi, '') 
    .replace(/\b\w+/g,function(s){return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();}) 
    return string; 
} 

我希望這是有道理的。任何幫助表示讚賞。提前致謝!

+0

你說你想'.COM/Sanchezs-Ball'(注意大小寫嗎?),但你的'hashifyString'沒有做到這一點! – 2014-12-05 02:50:46

+0

對不起,這是一個錯字。固定! – realph 2014-12-05 02:51:41

+0

你有沒有想過如果你的一個用戶在名稱中有變音符號?一世。e:'franois-font'而不是'francois-fonte',而不是談論德國人,他們在各地都有ümlauts:) – 2014-12-05 02:58:47

回答

1

首先讓我們簡單地創建一個inArray函數。

function inArray(val, ary){ 
    for(var i=0,l=ary.length; i<l; i++){ 
    if(ary[i] === val){ 
     return true; 
    } 
    } 
    return false; 
} 

現在,我們需要創建一個功能,使您的整個字符串小寫,所以我們可以利用只在每個單詞的第一個字母。這可以通過分割小寫字符串' '來完成。接下來,我們遍歷.split(' ')的結果,測試它是否是exceptions數組中的單詞之一。如果是這樣,我們不會利用它,否則我們會這樣做。我們.split(' ')上,並返回結果。.join(' ')所有的東西都在同一個' '我們.split(' ')上,並返回結果。

function ucFirstWord(str, exceptions){ 
    var st = str.toLowerCase().split(' '), r = []; 
    for(var i=0,l=st.length; i<l; i++){ 
    var s = st[i]; 
    var x = inArray(s, exceptions) ? s : s.charAt(0).toUpperCase()+s.substring(1); 
    r.push(x); 
    } 
    return r.join(' '); 
} 

該函數應該是不言自明的。

function lcHyphenize(str){ 
    return str.toLowerCase().replace(' ', '-'); 
} 

用法:

var ucString = ucFirstWord(yourStringVar, ['the', 'and', 'then', 'but', 'or', 'yet']); 
var hzString = lcHyphenize(yourStringVar); 
+0

這是''exceptions'數組,用於我的'inArray'函數,以確保這些單詞不會變成大寫。 – PHPglue 2014-12-05 03:27:14

+0

僅限代碼解答不被喜歡。你應該解釋它的作用以及爲什麼它修復了OP問題。這意味着你不太可能得到像「做什麼?」這樣的評論。 – RobG 2014-12-05 03:29:11

+0

@robG :)這只是我沒有閱讀OP的請求關於「我還想說」和「或」或「讓他們爲小寫字母」我的不好(我一開始以爲它是全部關於姓氏姓氏),但是,是的,你是對的。 – 2014-12-05 03:34:31