2012-07-26 55 views
0

Possible Duplicate:
Capitalize the first letter of string in JavaScript如何將javaScript中每個文本輸入的首字母大寫?

這可能是迄今爲止的代碼。我想FIRST_Name和LAST_Name字段大寫第一個字母,並使所有其他字母小:

此外,我不熟悉javaScript,所以我不完全確定我在做什麼。

最新編輯。這段代碼有什麼問題?

<HTML> 
<HEAD> 
<TITLE></TITLE> 
<script language="javascript" type="text/javascript"> 
<!-- 
function CheckForm() 

formObj.FIRST_Name.value = titleCase(formObj.FIRST_Name.value); 
formObj.LAST_Name.value = titleCase(formObj.LAST_Name.value); 

function titleCase(str) { 
    var words = str.split(/\s+/); 
    for (var i=0; i<words.length; i++) 
     words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1); 
    return words.join(" "); 
} 


{ 
    var formObj = document.getElementById("Data"); 
    var firstname = formObj.FIRST_Name.value; 
    var lastname = formObj.LAST_Name.value; 


    if(notEmpty(formObj.FIRST_Name, "Please enter your first name")){  
    if(notEmpty(formObj.LAST_Name,"Please enter your last name")){ 
    if(titleCase(formObj.FIRST_Name)    

    return true;}} 

    return false; 
    } 

function notEmpty(elem, helperMsg){ 
    if(elem.value.length == 0){ 
     alert(helperMsg); 
     elem.focus(); // set the focus to this input 
     return false; 
    } 
    return true; 
} 


</script> 
</HEAD> 
<BODY> 
<div style="background: #CCCC99"> 
<HR><FORM id="Data" onsubmit="return CheckForm()" action="post to server" method=post> 
<P>First Name: <input type=text name=FIRST_Name maxlength=15 size=15> 
    Last Name: <input type=text name=LAST_Name maxlength=15 size=15></P> 
<input type=submit value="Submit Products Registration Form" style="width: 220px"><input type=reset value="Reset"> 
</form> 
</div> 
</BODY> 
</HTML> 
+0

使用這個正則表達式更簡單:'/ \ b \ w/g'然後用大寫字母替換匹配(單個字符)。 '\ b'表示「文字邊界」。 (它甚至可以在連字符上工作,這可能或不可取:-) – 2012-07-26 01:45:53

+1

@pst - 在開始處允許空白是一個好主意,'\ b'應該這樣做,但原始代碼也會改變其餘的文字以小寫字母。 – nnnnnn 2012-07-26 02:16:16

+0

你想要做什麼?檢查輸入的格式是否正確(並警告)?提交時更正它(然後服務器端也可以)?在打字時糾正生活(非常煩人)? – Bergi 2012-07-26 02:22:23

回答

1

試試這個代碼:

function toTitleCase(str){ 
    var words = str.match(/\w*/g); 
    for(var i=0;i<words.length;i++) 
     words[i] = words[i][0].toUpperCase() + words[i].slice(1); 
    return words.join(' '); 
} 
toTitleCase('my name'); 
+0

我認爲問題是如何整合所說的'toTitleCase'功能。模糊或提交或..之前? – 2012-07-26 01:50:49

+0

匹配空格?我敢肯定你的意思是'分裂' – Bergi 2012-07-26 02:19:08

+0

@Bergi whitespaces?不,我匹配\ w(字母和數字) – 2012-07-26 02:41:20

2

對於我們這些誰是嚇的正則表達式(笑):

function titleCase(str) 
{ 
    var words = str.split(" "); 
    for (var i = 0; i < words.length; i++) 
    { 
     var j = words[i].charAt(0).toUpperCase(); 
     words[i] = j + words[i].substr(1); 
    } 
    return words.join(" "); 
} 
+1

@dykeag:看起來不錯,只有加入的數組仍然被命名爲'words' ... – Bergi 2012-07-26 02:17:52

+0

對不起,修正了.... – dykeag 2012-07-26 02:21:46

+0

@TheCount你在大寫字母后用字符串做什麼? – dykeag 2012-07-26 02:24:13

3

試試這個:

String.prototype.toCap = function() 
{ 
    return this.toLowerCase().replace(/^.|\s\S/g, function(str) { 
     return str.toUpperCase(); 
    }); 
}   

var firstname = "gob".toCap(); 
var lastname = "bluth".toCap(); 

alert(firstname + ' ' + lastname); 
+0

油滑!很好的實現! – dykeag 2012-07-26 02:26:25

+1

你可以用\ b做得更容易 - 看我的回答 – Bergi 2012-07-26 02:31:41

1

"don't know how to put it into my code"

複製titleCase()(或toTitleCase()或任何你調用它現在)功能爲你的腳本塊,然後就在if語句之前添加以下代碼在你CheckForm()功能:在點

formObj.FIRST_Name.value = titleCase(formObj.FIRST_Name.value); 
formObj.LAST_Name.value = titleCase(formObj.LAST_Name.value); 

這樣提交表格的地方將使用您的toTitleCase()函數進行更改。 (如果你的if語句前面添加的代碼字段將被不管notEmpty()驗證是否通過,這似乎是合理的,我改變了。)

(順便說一句,firstnamelastname變量聲明可以從CheckForm()功能刪除因爲你永遠不會使用這些變量。)

+0

就像我上面所說的那樣,你編輯到你的問題中的'titleCase()'函數有一個錯誤(它已經被dykeag的答案修復了)。正如我在我的回答中所說的那樣,對價值的改變只會在提交時發生 - 但對我來說似乎沒問題,而且您沒有另行指定。 – nnnnnn 2012-07-26 02:33:15

1

以大寫字母單個字符串請參閱How do I make the first letter of a string uppercase in JavaScript?

如果你想對這個在字符串中的每一個字,你將要拆分的串入的話,適用於每個人的ucFirst功能,並加入他們一起回來:

function titleCase(str) { 
    var words = str.split(/\s+/); 
    for (var i=0; i<words.length; i++) 
     words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1); 
    return words.join(" "); 
} 

或者你可以對它們施加一個正則表達式,以匹配每一個字母和替換它們:

function titleCase(str) { 
    return str.replace(/\b\S/g, function(c){ 
     return c.toUpperCase(); 
    }); 
} 

在您的最新編輯:你必須在第三,如果條​​件的語法錯誤,它升ack一個右括號。此外,您已將titleCase代碼插入到函數體之前。

/* the titleCase function from above here */ 

function CheckForm() { 
    var formObj = document.getElementById("Data"); 
    var firstname = formObj.FIRST_Name; 
    var lastname = formObj.LAST_Name; 

    firstname.value = titleCase(firstname.value); 
    lastname.value = titleCase(lastname.value); 

    return notEmpty(firstname, "Please enter your first name") 
     && notEmpty(lastname, "Please enter your last name"); 
} 

function notEmpty(elem, helperMsg){ 
    if(elem.value.length == 0){ 
     alert(helperMsg); 
     elem.focus(); // set the focus to this input 
     return false; 
    } 
    return true; 
} 

我個人對此的看法:不要嘗試用JavaScript修正名稱。您在表單提交時執行此操作,並且僅當用戶將一個輸入留空並遇到錯誤消息時,用戶纔會看到此操作的效果。(不要信任用戶輸入/ POST數據,JavaScript可能被禁用),所以如果你不熟悉JavaScript(或不喜歡它或任何其他),只需省略這個「特徵」。

相關問題