【问题标题】:Uppercase first letter of variable变量首字母大写
【发布时间】:2011-02-25 20:44:25
【问题描述】:

我在网上搜索过,找不到任何可以帮助我的东西。我想让变量中每个单词的第一个字母大写。

到目前为止我已经尝试过:

toUpperCase();

没有运气,因为它把所有字母都大写了。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

使用.replace[MDN]函数将单词开头的小写字母替换为大写字母。

var str = "hello world";
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
    return letter.toUpperCase();
});
alert(str); //Displays "Hello World"

编辑:如果您要处理的不仅仅是 a-z 字符,那么以下(更复杂的)正则表达式可能更适合您的目的。

var str = "петр данилович björn über ñaque αλφα";
str = str.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) {
    return letter.toUpperCase();
});
alert(str); //Displays "Петр Данилович Björn Über Ñaque Αλφα"

【讨论】:

  • 这不适用于Björn Lüchinger 之类的名称,它会变成BjöRn LüChinger。有什么解决办法吗?
  • @Dediqated 感谢您指出这一点,如果编辑有帮助,请告诉我。
  • 效果很好!如果我只想将字符串的第一个字符转换为大写,关于修改应该是什么的任何提示? (而不是每个单词)
  • @andufo 当然,这实际上要简单得多。只需使用str[0].toUpperCase() + str.slice(1)
  • @PeterOlson 感谢您的回答!我结束了使用var first = str.slice(0, str.indexOf(' ')); str = first.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) { return letter.toUpperCase(); }) + str.substr(first.length); 来覆盖特殊字符。
【解决方案2】:

更简单的方法:

$('#test').css('textTransform', 'capitalize');

我必须赞扬@Dementic 引导我走上正确的道路。比你们提议的要简单得多。

【讨论】:

  • 这只会改变字符串的视觉表示,而不是字符串值本身。
  • 虽然你不能将它应用到从数据库中获取的变量上,但是对于其他实例,这个方法非常干净
  • 注意:text-transform:capitalize 不会影响全部大写。
  • 如果字符串(变量)必须用于某些操作而不只是显示怎么办?
  • 注意,它会将输入保存为大写,它只会在视图中转换
【解决方案3】:

http://phpjs.org/functions/ucwords:569 有一个很好的例子

function ucwords (str) {
    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
        return $1.toUpperCase();
    });
}

(为简洁起见,从源代码中省略了功能注释。有关详细信息,请参阅链接源代码)

编辑:请注意,此函数将每个单词的第一个字母大写(如您的问题所要求),而不仅仅是字符串的第一个字母(如您的问题标题所要求的那样)

【讨论】:

  • 这比公认的在撇号后将句子中的单词大写的解决方案效果更好,例如“我是榜样”变成了“我是榜样”
  • 如果您的原始字符串中有下划线则不起作用,请将其添加到您的 REGEX 以获得更好的性能。 TY
  • @RuslanAbuzant 那将回答一个不同的问题。将下划线解释为单词分隔符(或一般空格)很好,但这不是 OP 所要求的......甚至可能会破坏他的用例。
  • ucwords() 很烂。它不适用于 Unicode(尤其是西里尔字母、希腊字母和其他中欧字母)。最好在后端使用 mb_convert_case(),例如:mb_convert_case($_POST['name'], MB_CASE_TITLE, 'utf-8');
【解决方案4】:

只是想添加一个纯 javascript 解决方案(没有 JQuery)

function capitalize(str) {
  strVal = '';
  str = str.split(' ');
  for (var chr = 0; chr < str.length; chr++) {
    strVal += str[chr].substring(0, 1).toUpperCase() + str[chr].substring(1, str[chr].length) + ' '
  }
  return strVal
}

console.log(capitalize('hello world'));

【讨论】:

  • 谢谢兄弟,只是想纠正一些事情。这个c &lt; str.length; 应该是chr &lt; str.length;
【解决方案5】:

我想您可以使用 substring() 和 toUpperCase() 提取第一个字符,将其大写,然后用结果替换字符串的第一个字符。

myString = "cheeseburger";
firstChar = myString.substring( 0, 1 ); // == "c"
firstChar.toUpperCase();
tail = myString.substring( 1 ); // == "heeseburger"
myString = firstChar + tail; // myString == "Cheeseburger"

我认为这应该适合你。另一件需要考虑的事情是,如果要显示此数据,您可以向其容器中添加一个具有 CSS 属性“text-transform: capitalize”的类。

【讨论】:

  • 不应该有 firstChar = firstChar.toUpperCase(); ?我尝试了 Node.js 中的代码,但我不得不这样做,否则什么都没有改变!
【解决方案6】:

要做到这一点,如果你打算使用 Javascript,你甚至不需要 Javascript

$('#test').css('text-transform', 'capitalize');

为什么不像 CSS 那样做呢

#test,h1,h2,h3 { text-transform: capitalize; }

或者作为一个类来做,然后将该类应用到任何你需要的地方

.ucwords { text-transform: capitalize; }

【讨论】:

  • 欢迎来到 Stackoverflow。您的回答是在建议一个替代方案(在某些用例中可能完全有效),但并没有真正回答这个问题。据我了解,作者想实际转换 Javascript 变量,而不仅仅是视觉表示。
  • 是的,但是遇到这个问题的其他人可能对 javascript 或 css 答案没问题,比如我,这真的很有帮助......
【解决方案7】:

听说过substr() 吗?

首先:

$("#test").text($("#test").text().substr(0,1).toUpperCase()+$("#test").text().substr(1,$("#test").text().length));


[更新:]

感谢@FelixKling 的提示:

$("#test").text(function(i, text) {
    return text.substr(0,1).toUpperCase() + text.substr(1);
});

【讨论】:

  • 不是调用text() 四次,而是将一个函数传递给text():$("#test").text(function(i, text) { return text.substr(0,1).toUpperCase()+text.substr(1);});
  • 这里挖老兵团,但如果知道内容进入元素,使用起来会容易得多:$('#test').style.textTransform='capitalize';
  • 关闭,@Dementic,但应该是:$('#test').css('textTransform', 'capitalize'); BTW,这是最好的答案。我会提交它作为答案。
  • @vbullinger - 当我写得烂醉如泥时不要评判我的代码 :) 我喜欢 js,而不是 jq,所以我的代码是错误的,但不会太多document.getElementById('test').style.textTransform='capitalize';
【解决方案8】:

在@peter-olson 的回答的基础上,我采用了一种不使用 jQuery 的更加面向对象的方法:

String.prototype.ucwords = function() {
    return this.toLowerCase().replace(/\b[a-z]/g, function(letter) {
        return letter.toUpperCase();
    });
}

alert("hello world".ucwords()); //Displays "Hello World"

示例:http://jsfiddle.net/LzaYH/1/

【讨论】:

  • 在我看来,这确实是最合适的方式。我会称它为 toUpperCaseWords 以符合 javascript 的 toUpperCase() 和 toLowerCase()
【解决方案9】:

就这么简单:

string = 'test';
newString = string[0].toUpperCase() + string.slice(1);
alert(newString);

【讨论】:

    【解决方案10】:

    最简单的方法

    let str="hiren raiyani"
    str.toLowerCase().replace(/(?<= )[^\s]|^./g, a => a.toUpperCase());
    

    用户自定义函数:

    function capitalize(str){
     return str.toLowerCase().replace(/(?<= )[^\s]|^./g, a => a.toUpperCase());
    }
    

    输出:Hiren Rayani

    使用代码作为您的用户定义函数或直接

    【讨论】:

    【解决方案11】:
    var mystring = "hello World"
    mystring = mystring.substring(0,1).toUpperCase() + 
    mystring.substring(1,mystring.length)
    
    console.log(mystring) //gives you Hello World
    

    【讨论】:

      【解决方案12】:
      var ar = 'foo bar spam egg'.split(/\W/);
      for(var i=0; i<ar.length; i++) {
        ar[i] = ar[i].substr(0,1).toUpperCase() + ar[i].substr(1,ar[i].length-1) 
      }
      ar.join(' '); // Foo Bar Spam Egg
      

      【讨论】:

        【解决方案13】:

        你可以试试这个简单的代码加上 ucwords 的 PHP 特性。

        function ucWords(text) {
            return text.split(' ').map((txt) => (txt.substring(0, 1).toUpperCase() + txt.substring(1, txt.length))).join(' ');
        }
        ucWords('hello WORLD');
        

        它将保持大写不变。

        【讨论】:

          【解决方案14】:

          完全基于@Dementric 的回答,该解决方案已准备好使用简单的 jQuery 方法“ucwords”进行调用...感谢所有在这里做出贡献的人!!!

          $.extend({
          ucwords : function(str) {
              strVal = '';
              str = str.split(' ');
              for (var chr = 0; chr < str.length; chr++) {
                  strVal += str[chr].substring(0, 1).toUpperCase() + str[chr].substring(1, str[chr].length) + ' '
              }
              return strVal
          }
          

          });

          示例: 这可以使用方法调用

          var string = "this is a test";
          string = $.ucwords(string); // Returns "This Is A Test"
          

          【讨论】:

            【解决方案15】:

            您可以使用text-transform: capitalize; 进行这项工作 -

            HTML -

            <input type="text" style="text-transform: capitalize;" />
            

            jQuery -

            $(document).ready(function (){
               var asdf = "WERTY UIOP";
               $('input').val(asdf.toLowerCase());
            });
            

            Try This

            注意:它只是改变字符串的视觉表示。如果你提醒这个字符串,它总是显示字符串的原始值。

            【讨论】:

              【解决方案16】:

              没有 JQuery

              String.prototype.ucwords = function() {
                  str = this.trim();
                  return str.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g, function(s){
                      return s.toUpperCase();
                  });
              };
              
              console.log('hello world'.ucwords()); // Display Hello World
              

              【讨论】:

                【解决方案17】:

                首字母大写前要降低的字符串。

                (均使用 Jquery 语法)

                function CapitaliseFirstLetter(elementId) {
                    var txt = $("#" + elementId).val().toLowerCase();
                    $("#" + elementId).val(txt.replace(/^(.)|\s(.)/g, function($1) {
                    return $1.toUpperCase(); }));
                    }
                

                另外一个函数将整个字符串大写:

                function CapitaliseAllText(elementId) {
                     var txt = $("#" + elementId).val();
                     $("#" + elementId).val(txt.toUpperCase());
                     }
                

                用于文本框点击事件的语法:

                onClick="CapitaliseFirstLetter('TextId'); return false"
                

                【讨论】:

                  【解决方案18】:

                  我已经使用了这个代码 -

                  function ucword(str){
                      str = str.toLowerCase().replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g, function(replace_latter) { 
                          return replace_latter.toUpperCase();
                      });  //Can use also /\b[a-z]/g
                      return str;  //First letter capital in each word
                  }
                  
                  var uc = ucword("good morning. how are you?");
                  alert(uc);
                  

                  【讨论】:

                    【解决方案19】:

                    HTML:

                    <input class="capitalize" name="Address" type="text" value="" />
                    

                    带有 jQ​​uery 的 Javascript:

                    $(".capitalize").bind("keyup change", function (e) {
                            if ($(this).val().length == 1)
                                $(this).val($(this).val().toUpperCase());
                            $(this).val($(this).val().toLowerCase().replace(/\s[\p{L}a-z]/g, function (letter) {
                                return letter.toUpperCase();
                            }))
                        });
                    

                    【讨论】:

                      【解决方案20】:

                       var str = "HELLO WORLD HELLO WORLD HELLO WORLD HELLO WORLD";
                               str = str.replace(
                                              /([A-Z])([A-Z]+)/g,
                              				function (a, w1, w2) {
                                                  return w1 + w2.toLowerCase();
                                              });
                      alert(str);

                      【讨论】:

                        【解决方案21】:

                        这里是 unicode-safe ucwords() 函数,它还尊重双姓,如俄语 Засс-Ранцев 和一些贵族名字,如 Honoré de Balzac、d'Artagnan、Vincent van Gogh、Otto von Bismarck、Sulaymān ibn Dāwūd 等:

                        String.prototype.ucwords = function() {
                          return this.toLowerCase()
                            .replace(/(^|\s|\-)[^\s$]/g, function(m) {
                               return m.toUpperCase();
                            })
                            // French, Arabic and some noble names...
                            .replace(/\s(Of|De|Van|Von|Ibn|Из|Ван|Фон|Ибн)\s/g, function(m) { // Honoré de Balzac, Vincent van Gogh, Otto von Bismarck, Sulaymān ibn Dāwūd etc.
                               return m.toLowerCase();
                            })
                            .replace(/(^|\s)(D|Д)(['’][^\s$])/g, function(m, p1, p2, p3) { // D'Artagnan or d'Artagnan / Д’Артаньян или д’Артаньян
                               return p1 + (p1 === "" ? p2/*.toUpperCase()*/ : p2.toLowerCase()) + p3.toUpperCase();
                            });
                        }
                        

                        【讨论】:

                          【解决方案22】:

                          在 JS 中将首字母大写的最简单方法

                          var string = "made in india";
                          
                          string =string .toLowerCase().replace(/\b[a-z]/g, function(letter){return  letter.toUpperCase();});
                          
                          alert(string );
                          

                          结果: “印度制造”

                          【讨论】:

                            【解决方案23】:
                            var country= $('#country').val();
                            
                            var con=country[0].toUpperCase();
                            
                            ctr= country.replace(country[0], con);
                               
                            

                            无需创建任何函数,只需 jugaaar

                            【讨论】:

                              【解决方案24】:

                              使用下面的函数

                              const capitalize = (s) => {
                                if (typeof s !== 'string') return ''
                                return s.charAt(0).toUpperCase() + s.slice(1)
                              }
                              
                              capitalize('test') //'Test'
                              capitalize('name') //'Name'
                              

                              【讨论】:

                                【解决方案25】:

                                确实有很多方法可以做到这一点!

                                我认为人们忘记的一件事是字符串是字符数组。因此,任何字符串的第一个字母都将是其数组的“第零个”元素:

                                let word = 'interesting';
                                console.log(word[0]);
                                // 'i'
                                

                                利用这一事实来大写第一个字母 (afaik) 的最简单方法是:

                                let word = 'interesting';
                                let titleCase = word[0].toUpperCase() + word.substr(1);
                                console.log(titleCase);
                                // 'Interesting'
                                

                                ...或作为一个函数:

                                function toTitleCase(word) {
                                    return word[0].toUpperCase() + word.substr(1);
                                }
                                

                                【讨论】:

                                  【解决方案26】:

                                  简短的回答:

                                  let str = 'this is a string';
                                  
                                  let result = str.replace(/\b\w/g, x => x.toUpperCase());
                                  
                                  console.log(result); // This Is A String
                                  

                                  【讨论】:

                                    猜你喜欢
                                    • 2019-02-02
                                    • 2021-07-29
                                    • 2011-05-14
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2011-06-16
                                    • 2021-11-02
                                    相关资源
                                    最近更新 更多