2014-04-10 9 views
0

我有兩個文本字段,一個名爲business_name,另一個名爲slug。我擁有它,以便當一個人在指定的字段中鍵入商業名稱時,該值將被複制到slug字段中。我也希望進入slug字段的值可以刪除所有內容,但留下字母和數字,並用hypen替換空格。這是我目前,螢火蟲不會顯示我的任何錯誤,所以我不知道我在做什麼錯如何複製文本字段的值,刪除符號和空格,然後放置連字符?

$(document).ready(function() { 
     var business_name = ''; 
    $("#business_name").bind('keypress', function() { 
     business_name = $(this).val(); 
     business_name.replace('/[a-zA-Z0-9]\s+/g', '-').toLowerCase(); 
     $("#slug").val(business_name); 

    }); 
}); 
+1

你的正則表達式是錯誤的,你所描述的東西。它應該是'/ \ s + | [^ A-Za-z0-9]/g'或類似的東西。沒有引號。 – blgt

回答

0

第一個問題:string.replace不發生變異的字符串,它會創建一個新的。

第二個問題:你的正則表達式會匹配所有的字符,你只想匹配任何不是字母,數字或空格的東西並刪除它。

第三個問題:正則表達式不是字符串。他們不需要用引號括起來

類似:

business_name = business_name.replace(/\s+/g,'-').toLowerCase();    // replace spaces 
business_name = business_name.replace(/[^a-zA-Z0-9-]/g,'');     // remove other characters 

http://jsfiddle.net/ghw6c/4/

+0

我認爲這是正確的答案。只有兩件事:'/ \ s +/g'和也許'/ [^ \ w - ]/g'。 –

+1

@azeós:同意'\ s +',除非OP希望雙空格替換爲雙'--',我懷疑它。在第二種情況下,\ w在至少一些正則表達式的實現中包含下劃線,所以它不會刪除它們。 [見](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp):*匹配基本拉丁字母表中的任何字母數字字符,包括下劃線。等同於[A-Za-z0-9 _] * –

+0

很高興知道Matt,我不知道\ w可能包含下劃線。 –

0

這裏有兩個問題 - 當你調用替換不把報價周圍的正則表達式。你想形式的東西:

business_name.replace(/[a-zA-Z0-9]\s+/g, '-') 

而且,它不值替換原來的字符串 - 它返回與被替換的文本的新字符串。所以,當你設置#slug的值時,你仍然在看原來的值。

你所使用的正則表達式也沒有達到你想要的目標,所以我改變了它,先去掉任何不是字母,數字或空白的東西,然後它將任何空白轉換爲短跑。

你可以你塞線改爲

 $("#slug").val(business_name.toLowerCase().replace(/![a-z0-9\s]/g, '').replace(/\s/, '-')); 

我已付出你的提琴here

+0

哦,我得到了它,謝謝,我設置了一個jsfiddle,並注意到當我把一個空格它會退格並刪除我的一些文本。如果您嘗試輸入內容並添加空格,您會看到我的意思。是.replace()的默認狀態是什麼? http://jsfiddle.net/ghw6c/2/ –

+0

你仍然在第一個案件和第二個案件中有報價,你沒有得到OP想要的結果。你正在替換'a-zA-Z0-9'範圍內的任何內容,後面跟着一個帶有'-'的空格,這意味着你失去了一個角色。 –

+0

@Matt - 你是對的第一個案件。我粘貼他的代碼而不是我的固定版本。我更新了第二個,以便它首先刪除任何非字母/數字/空格,然後用短劃線替換任何空格。 – Danny

相關問題