变量的大写首字母


Answers:


227

使用.replace[MDN]功能用大写字母替换单词开头的小写字母。

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


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

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 Αλφα"


1
这不适用于像Björn Lüchinger这样的名称BjöRn LüChinger。有什么解决办法吗?
2014年

2
@Dediqated感谢您指出这一点,如果编辑有帮助,请通知我。
彼得·奥尔森

很棒!如果我只想将字符串的第一个字符转换为大写,则对修改应有的任何提示?(而不是每个字)
Andres SK

6
@andufo当然,这实际上要简单得多。只需使用str[0].toUpperCase() + str.slice(1)
Peter Olson

@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);了特殊字符。
安德列斯SK

72

更简单的方法:

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

我必须给@Dementic一定的功劳,以带领我走上正确的道路。比你们提议的要简单得多。


31
这只会更改字符串的视觉表示,而不会更改字符串值本身。
toxaq 2012年

1
您不能将其应用于从数据库获取的变量,但是对于其他情况,此方法非常干净
Armand

3
注意:text-transform:capitalize不会影响所有大写字母。
鲍勃·斯坦

1
如果必须将字符串(变量)用于除显示以外的其他操作,该怎么办?
Fr0zenFyr

请注意,它将以大写形式保存输入,只会在视图中进行转换
Sherif Elkassaby

25

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

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

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

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


这比接受的一种解决方案更好,该解决方案在撇号后用大写字母表示句子中的单词,因此,例如“我是一个例子”变为“我是一个例子”
lizardhr

如果您的原始字符串中带有下划线,则无法使用,请将其添加到REGEX中以获得更好的性能。TY
Ruslan Abuzant

1
@RuslanAbuzant那将回答一个不同的问题。将下划线解释为单词分隔符(或一般的空格)是可以的,但这不是OP所要求的...甚至可能破坏他的用例。
Jonathan Fingland '17

1
ucwords()很烂。它不适用于Unicode(特别是西里尔字母,希腊字母和其他中欧字母)。最好在后端使用mb_convert_case(),例如:mb_convert_case($ _ POST ['name'],MB_CASE_TITLE,'utf-8');
Aleksey Kuznetsov

14

只是想添加一个纯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'));


1
谢谢兄弟,只想纠正一些问题。这c < str.length;应该是chr < str.length;
Leysam Rosario 2012年

13

我想您可以使用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中的代码,但我必须这样做,否则什么都没有改变!
Adrian Adaine

9

要做到这一点,如果您要使用的话,甚至根本不需要Javascript

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

为什么不像CSS这样做

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

或将其作为一门课程,并将其应用于您需要的任何地方

.ucwords { text-transform: capitalize; }

4
欢迎使用Stackoverflow。您的答案是建议一种替代方法(在某些用例中可能完全有效),但并未真正回答问题。据我了解的问题,作者想要实际转换Javascript变量,而不仅仅是视觉上的表现。
helmbert

3
是的,但是其他遇到这个问题的人可能对javascript或css答案都可以,例如我,这确实很有帮助...
Brian Powell

6

听说过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);
});

4
不用调用text() 四次,而是将一个函数传递给text()$("#test").text(function(i, text) { return text.substr(0,1).toUpperCase()+text.substr(1);});
Felix Kling

1
在这里挖掘老兵,但是如果知道内容包含了元素,那么使用起来会容易得多:$('#test').style.textTransform='capitalize';
Rafael Herscovici 2012年

关闭,@ Dementic,但应该是: $('#test').css('textTransform', 'capitalize'); 顺便说一句,这是最好的答案。我将其作为答案提交。
vbullinger 2012年

@vbullinger-当我将其喝醉如地狱时不要判断我的代码:)而且我喜欢js,而不是jq,所以我的代码是错误的,但不要太多document.getElementById('test').style.textTransform='capitalize';
Rafael Herscovici 2012年

5

基于@ 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符合javascripttoUpperCase()toLowerCase()
AB Carroll

4
var mystring = "hello World"
mystring = mystring.substring(0,1).toUpperCase() + 
mystring.substring(1,mystring.length)

console.log(mystring) //gives you Hello World

3
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

3

您可以尝试使用PHP中ucwords功能的简单代码。

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

它将使大写字母保持不变。


3

它很简单,如下所示:

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

2

完全基于@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"

2

您可以text-transform: capitalize;用于这项工作-

HTML-

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

jQuery-

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

试试这个

注意:这只是更改字符串的视觉表示。如果您警告此字符串,它将始终显示该字符串的原始值。


2

最简单的方法

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

输出:Hiren Raiyani

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


0

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

(均使用Jquery语法)

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

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

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

在文本框的click事件上使用的语法:

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

0

我已经使用了此代码-

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

0

HTML:

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

jQuery 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();
        }))
    });

0

没有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

0

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


0

这是unicode安全的ucwords()函数,该函数还尊重俄语Засс-Ранцев等双重姓氏,以及Honoréde Balzac,d'Artagnan,Vincent van Gogh,Otto von Bismarck,SulaymānibnDā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();
    });
}

0

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

var string = "made in india";

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

alert(string );

结果: “印度制造”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.