如何在javaScript中将每个文本输入的第一个字母大写? [复制]

Posted

技术标签:

【中文标题】如何在javaScript中将每个文本输入的第一个字母大写? [复制]【英文标题】:How do I capitalize the first letter of each text input in javaScript? [duplicate] 【发布时间】:2012-07-24 13:26:20 【问题描述】:

可能重复:Capitalize the first letter of string in 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>

【问题讨论】:

使用这个正则表达式更简单:/\b\w/g 然后只需将匹配(单个字符)替换为大写版本。 \b 表示“单词边界”。 (它甚至可以跨越连字符,这可能是可取的,也可能不是可取的:-) @pst - 在开头允许空格是个好主意,\b 应该这样做,但原始代码还将文本的其余部分更改为小写。 你到底想做什么?检查输入的格式是否正确(和警报)?提交时更正它(然后服务器端也可以)?打字时正确直播(很烦人)? 编辑问题时添加的titleCase()函数将不起作用(它有一个错误:pieces未定义-应该是words)。 刚刚在编辑中修复了这个问题。对不起... 【参考方案1】:

试试这个:

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);

【讨论】:

你可以用 \b 做的更简单——看我的回答【参考方案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(" ");

【讨论】:

@dykeag:看起来不错,只是要加入的数组仍然命名为words... @TheCount 大写后的字符串在做什么?【参考方案3】:

“不知道如何将其放入我的代码中”

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() 函数中删除,因为您从不使用这些变量。)

【讨论】:

正如我在上面评论的那样,您在问题中编辑的 titleCase() 函数有一个错误(此后已在 dykeag 的答案中修复)。正如我在回答中所说,对值的更改只会在提交时发生 - 但对我来说这似乎没问题,你没有另外指定。【参考方案4】:

试试这个代码:

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');

【讨论】:

我认为问题是如何整合所说的toTitleCase 功能..例如在模糊或提交之前或..? 匹配空格?我确定你的意思是split @Bergi 空格?不,我匹配的是 \w(字母和数字) 呃,我累了:-|好的,你真的想使用 match - 但是你需要在它 not 匹配的情况下捕获 null,例如在空字符串或 unicode 字符上。 嗯,你是对的。在这种情况下,我们必须使用 /\w*/g 而不是 /\w+/g 。谢谢你:)【参考方案5】:

要将单个字符串大写,请参阅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();
    );


在您最近的编辑中:您在第三个 if 条件中遇到语法错误,它缺少右括号。另外,您在函数体之前插入了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(或不喜欢它或其他什么),请忽略此“功能”。

【讨论】:

以上是关于如何在javaScript中将每个文本输入的第一个字母大写? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中将所有对象属性设置为 null?

如何在javascript中将文本分配给标签?

JavaScript jquery - 专注于页面上的第一个文本输入字段

如何在Java中将String的第一个字母大写?

如何在 zeppelin 中将数组从 spark 绑定到 javascript?

如何在 C++ 中将文本文件输入转换为数组