ใช้อักษรตัวพิมพ์ใหญ่ในสตริง


183

วิธีที่ดีที่สุดในการใช้ประโยชน์จากคำในสตริงคืออะไร?


66
ถ้ามันสำหรับแสดงใช้ CSS text-transform:capitalize;.
kennytm

3
ใช้เพื่อตั้งค่าแอตทริบิวต์ "title" เป็นองค์ประกอบ DOM ไม่มี CSS :)
vsync

1
นอกจากนี้ฉันได้ถามคำถามนี้ถึงแม้ว่าฉันจะรู้วิธีแก้ปัญหาเพียงเพราะฉันพยายามค้นหาในเว็บไซต์นี้และไม่สามารถหาวิธีแก้ไขปัญหาที่เหมาะสมได้ดังนั้นจึงควรเพิ่มเพื่อประโยชน์ของเอกสาร
vsync

1
@KennyTM: การแปลงข้อความจะไม่ใช้ประโยชน์จากค่า fieds ของรูปแบบจริงๆแล้วค่าทั้งหมดจะแสดงเป็นตัวพิมพ์ใหญ่ แต่ส่งไปยังเซิร์ฟเวอร์ตามที่เป็นจริง
Marco Demaio

8
@Marco: ใช่นั่นคือเหตุผลที่ฉันพูดว่า "ถ้าเป็นจอแสดงผล"
kennytm

คำตอบ:


287
/**
 * Capitalizes first letters of words in string.
 * @param {string} str String to be modified
 * @param {boolean=false} lower Whether all other letters should be lowercased
 * @return {string}
 * @usage
 *   capitalize('fix this string');     // -> 'Fix This String'
 *   capitalize('javaSCrIPT');          // -> 'JavaSCrIPT'
 *   capitalize('javaSCrIPT', true);    // -> 'Javascript'
 */
const capitalize = (str, lower = false) =>
  (lower ? str.toLowerCase() : str).replace(/(?:^|\s|["'([{])+\S/g, match => match.toUpperCase());
;

  • แก้ไขโซลูชันของ Marco Demaioโดยที่ตัวอักษรตัวแรกที่มีช่องว่างนำหน้าไม่ได้พิมพ์ใหญ่
capitalize(' javascript'); // -> ' Javascript'
  • สามารถจัดการสัญลักษณ์ประจำชาติและตัวอักษรเน้นเสียง
capitalize('бабушка курит трубку');  // -> 'Бабушка Курит Трубку'
capitalize('località àtilacol')      // -> 'Località Àtilacol'
  • สามารถจัดการกับคำพูดและวงเล็บปีกกา
capitalize(`"quotes" 'and' (braces) {braces} [braces]`);  // -> "Quotes" 'And' (Braces) {Braces} [Braces]

4
regexp ทำงานเช่น "ใช้อักขระที่ไม่ใช่ช่องว่างทั้งหมด (\ S) ยืนอยู่ที่จุดเริ่มต้นของสตริง (^) หรือหลังอักขระช่องว่าง (\ s) และพิมพ์ใหญ่อักขระเหล่านั้น"
ทำให้เสียชีวิต

3
การปรับปรุงเล็กน้อยเพื่อจัดการสตริงตัวพิมพ์ใหญ่ :) ** String.prototype.capitalize = function () {ส่งกลับ this.toLowerCase () แทนที่ (/ (?: ^ | \ s) \ S / g, ฟังก์ชั่น (a) {return a.toUpperCase ();}); }; **
SuryaPavan

1
โปรดอย่าดัดแปลงต้นแบบของวัตถุที่มีอยู่
Ascherer

1
@ Dr.X ดู 'CHECK THIS OUT'.capitalize(true) -> "Check This Out"add-on trueพารามิเตอร์ใจ
ทำให้เสียชีวิต

1
@ SeaWarrior404 คุณพูดถูกต้องอัปเดตคำตอบของฉันด้วยไวยากรณ์ es6 เพิ่ม jsdoc และการรักษาเครื่องหมายวรรคตอน
เลิกใช้

216

การใช้งานที่สั้นที่สุดสำหรับการใช้อักษรตัวพิมพ์ใหญ่คำภายในสตริงคือสิ่งต่อไปนี้โดยใช้ฟังก์ชั่นลูกศรของ ES6:

'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'

การใช้งานร่วมกับ ES5:

'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'

โดยทั่วไปแล้ว regex จะตรงกับตัวอักษรตัวแรกของแต่ละคำภายในสตริงที่กำหนดและแปลงเฉพาะตัวอักษรนั้นเป็นตัวพิมพ์ใหญ่:

  • \ bตรงกับขอบเขตคำ (จุดเริ่มต้นหรือจุดสิ้นสุดของคำ);
  • \ wจับคู่เมตาอักขระต่อไปนี้ [a-zA-Z0-9]

สำหรับอักขระที่ไม่ใช่ ASCII โปรดอ้างถึงโซลูชันนี้แทน

'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())

regex นี้ตรงกับตัวอักษรตัวแรกและตัวอักษรที่ไม่ใช่ช่องว่างนำหน้าด้วยช่องว่างภายในสตริงที่กำหนดและแปลงเฉพาะตัวอักษรนั้นเป็นตัวพิมพ์ใหญ่:

  • \ sจับคู่กับอักขระช่องว่าง
  • \ Sจับคู่อักขระที่ไม่ใช่ช่องว่าง
  • (x | y)ตรงกับตัวเลือกใด ๆ ที่ระบุ

กลุ่มที่ไม่มีการจับภาพสามารถใช้ที่นี่ได้ดังต่อไปนี้/(?:^|\s)\S/gแม้ว่าการgตั้งค่าสถานะภายใน regex ของเราจะไม่จับภาพกลุ่มย่อยโดยการออกแบบต่อไป

ไชโย!


1
คุณสามารถอธิบายในคำตอบว่า regex ทำงานอย่างไร (ความหมายของแต่ละชิ้น)
vsync

2
ฉันจะเลือกมันเป็นคำตอบถ้าคำอธิบายอยู่ข้างในและไม่เป็นความคิดเห็นที่ใครพลาดได้
vsync

2
ดูเหมือนจะใช้งานไม่ได้กับอักขระนอร์ดิกä, öและå ตัวอย่างเช่นpäijät-hämeกลายเป็นPäIjäT-HäMe
Markus Meskanen

1
วิธีนี้ไม่ดีสำหรับเนื้อหาสากลที่มีอักขระกำกับ / ไม่ใช่ละติน EisbäRenเป็นหนึ่งผลลัพธ์ตัวอย่างเช่น
Daniel B.

3
ตัวอย่างจาก @MarkusMeskanen ควรเปลี่ยนเป็นPäijät-Hämeแต่อย่างน้อยใน Chrome whitespace จะไม่รวมเครื่องหมายขีด (-) ดังนั้นส่วนที่สองของชื่อจะไม่ได้เป็นตัวพิมพ์ใหญ่ /(^|\s|-)\S/gสามารถได้รับการแก้ไขเป็น
MiRin

34
function capitalize(s){
    return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};

capitalize('this IS THE wOrst string eVeR');

เอาท์พุท: "นี่คือสตริงที่แย่ที่สุดที่เคย"

ปรับปรุง:

ดูเหมือนว่าโซลูชันนี้จะแทนที่เหมืองของฉัน: https://stackoverflow.com/a/7592235/104380


ระวังว่าฟังก์ชั่นของคุณใช้อักษรตัวใหญ่ที่เน้นเสียงผิดอย่างผิดปกติดูคำตอบของฉัน: stackoverflow.com/questions/2332811/capitalize-words-in-string/ ...... ฉันยัง protoyped
Marco Demaio

9
ฉันไม่ชอบการสร้างต้นแบบมันมีความเป็นไปได้ที่จะสร้างการชนกันโดยที่คนอื่นใช้ชื่อเดียวกันกับต้นแบบของสตริงเช่นกัน
vsync

15

คำตอบให้โดย vSyncทำงานตราบเท่าที่คุณไม่ได้มีการเน้นเสียงตัวอักษรในสายป้อน

ฉันไม่ทราบเหตุผล แต่เห็นได้ชัดว่า\bในตัวอักษรที่ตรงกัน regexp ยังเน้นเสียงตัวอักษร (ทดสอบใน IE8 และ Chrome) ดังนั้นสตริงเช่น"località"จะถูกแปลงเป็นตัวพิมพ์ใหญ่ผิด"LocalitÀ" ( àตัวอักษรได้รับตัวพิมพ์ใหญ่ทำให้ regexp คิดว่ามันเป็นคำศัพท์)

ฟังก์ชั่นทั่วไปที่ใช้งานได้กับตัวอักษรที่เน้นเสียงก็คือฟังก์ชันนี้:

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

คุณสามารถใช้สิ่งนี้:

alert( "hello località".toCapitalize() );

1
" javascript".toCapitalize() -> " javascript"
ทำให้เสียชีวิต

2
สำหรับคนที่กังวลใจ: คำตอบที่ไม่เหมาะสมstackoverflow.com/questions/2332811/capitalize-words-in-string/?hl=thเป็นคำตอบที่ดีที่สุดที่นี่แล้ว
Marco Demaio

4

เนื่องจากทุกคนให้คำตอบ JavaScript ที่คุณขอมาฉันจะกล่าวว่าคุณสมบัติ CSS text-transform: capitalizeจะทำสิ่งนี้ทุกประการ

ฉันรู้ว่านี่อาจไม่ใช่สิ่งที่คุณต้องการ - คุณไม่ได้ให้บริบทใด ๆ กับเราที่คุณกำลังทำอยู่ - แต่ถ้ามันเป็นเพียงแค่การนำเสนอฉันจะไปกับ CSS แทน


KennyTM เอาชนะคุณให้ได้ ตรวจสอบความคิดเห็นของเขาในส่วนคำถาม :-)
Buhake Sindi

ใช่ฉันรู้คุณลักษณะ CSS นี้ แต่ฉันต้องการสิ่งนี้สำหรับแอตทริบิวต์ของชื่อเรื่องถึงองค์ประกอบ dom และมันไม่มี CSS เลยอย่างที่คุณอาจทราบ
vsync

4

John Resig (จากชื่อเสียงของ jQuery) ส่งสคริปต์ perl ที่เขียนโดย John Gruber ไปยัง JavaScript สคริปต์นี้ใช้ประโยชน์ในวิธีที่ชาญฉลาดยิ่งขึ้น แต่ไม่ได้ใช้อักษรตัวพิมพ์เล็กเช่น 'ของ' และ 'และ'

คุณสามารถค้นหาได้ที่นี่: ชื่อเรื่องตัวพิมพ์ใหญ่ใน JavaScript


4

ใช้ JavaScript และ html

String.prototype.capitalize = function() {
  return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
    return p1 + p2.toUpperCase();
  });
};
<form name="form1" method="post">
  <input name="instring" type="text" value="this is the text string" size="30">
  <input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
  <input name="outstring" type="text" value="" size="30">
</form>

โดยทั่วไปคุณสามารถทำได้string.capitalize()และมันจะพิมพ์ใหญ่ทุกตัวอักษรตัวที่ 1 ของแต่ละคำ

ที่มา: http://www.mediacollege.com/internet/javascript/text/case-capitalize.html


1
ฉันไม่ได้เป็นแฟนของการสร้างต้นแบบด้วยวิธีนี้เพราะบางครั้งสคริปต์ของฉันเป็นบุคคลที่สามฝังอยู่ในเว็บไซต์อื่น ๆ และนั่นอาจทำให้เกิดปัญหากับวัตถุทั่วโลกเช่น "String" ... ดังนั้นฉันจึงชอบ "fucntion" แทน
vsync

1
นั่นคือความงามของต้นแบบ (ไม่ใช่ Prototype ที่คุณดาวน์โหลด) เป็นมาตรฐานในจาวาสคริปต์และใช้งานได้ในเบราว์เซอร์ทั้งหมด
Buhake Sindi

ฉันสงสัยว่ามันอาจทำให้เกิดปัญหาได้ถ้ามีคนอื่นสร้างต้นแบบของ String.prototype.capitalize ของตัวเองแล้วและฉันจะลบล้างมันโดยไม่ตั้งใจ
vsync

1
@vsync คุณสามารถตรวจสอบได้ตลอดเวลาโดยทำสิ่งนี้ ที่วัตถุเป็นประเภทif (object.capitalize) {...} else {String.prototype.capitalize = function()....} Stringดังนั้นมันค่อนข้างง่ายจริงๆ
Buhake Sindi

4

คำตอบของ Ivo นั้นดี แต่ฉันไม่ชอบจับคู่\wเพราะไม่จำเป็นต้องใช้ประโยชน์จาก 0-9 และ AZ เราสามารถข้ามสิ่งเหล่านั้นและจับคู่กับ az เท่านั้น

'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'

มันเป็นผลลัพธ์เดียวกัน แต่ฉันคิดว่าชัดเจนขึ้นในแง่ของรหัสเอกสารด้วยตนเอง


"Är Toaletten"นี้จะล้มเหลวสำหรับตัวอักษรภาษาอังกฤษที่ไม่ได้: คำตอบของคุณหลายปีหลังจากได้รับคำตอบที่ดีมากไม่ได้มีส่วนช่วยในการอภิปราย ..
vsync

@vsync ที่ดูเหมือนว่ารุนแรง มันเป็นการเพิ่มประสิทธิภาพของคำตอบที่ยอมรับ /\b\w/gยังล้มเหลวสำหรับตัวอักษรที่ไม่ใช่ภาษาอังกฤษ ไม่ใช่ทุกคนที่เกี่ยวข้องกับอักขระยูนิโค้ดและสิ่งนี้จะช่วยผู้ที่ไม่ต้องการ
เงินใหญ่

1
เอาล่ะ .. ฉันไม่คิดว่าคุณควรใช้สิ่งนี้แทนคำตอบยอดนิยมเพียงเพราะคุณไม่ต้องการภาษาอื่นนอกเหนือจากภาษาอังกฤษ นั่นไม่ใช่เหตุผลที่ดีพอเนื่องจากไม่มีบทลงโทษสำหรับการทำมันสำหรับตัวละคร ASCII ทั้งหมดตามที่กล่าวไว้ในคำถามยอดนิยม
vsync


3

วิธีกระชับ ES6 ในการทำอาจมีลักษณะเช่นนี้

const capitalizeFirstLetter = s => s.charAt(0).toUpperCase() + s.slice(1)

นี่เป็นตัวพิมพ์ใหญ่ตัวอักษรตัวแรกเท่านั้นและจะไม่ส่งผลกระทบต่อส่วนที่เหลือของประโยค


2

ทางออกของฉัน:

String.prototype.toCapital = function () {
    return this.toLowerCase().split(' ').map(function (i) {
        if (i.length > 2) {
            return i.charAt(0).toUpperCase() + i.substr(1);
        }

        return i;
    }).join(' ');
};

ตัวอย่าง:

'álL riGht'.toCapital();
// Returns 'Áll Right'

ลองใช้วิธีการต่าง ๆ และวิธีการแก้ปัญหาของคุณจะมีประสิทธิภาพมากที่สุดและให้ความสำคัญกับชื่อ jsbench.me/urjeu9wvql
nasatome

สิ่งนี้ใช้ไม่ได้: 'a áAA. bb . bbb .cc .d'.toCapital();=>a Áaa. bb . Bbb .cc .d
vsync

ฉันทำให้มันไม่พิจารณาคำที่มีตัวอักษรน้อยกว่า 2 ตัวเช่น "ของ", "เป็น"
Erick Tatsui

1

สิ่งนี้ควรครอบคลุมกรณีการใช้งานพื้นฐานส่วนใหญ่

const capitalize = (str) => {
    if (typeof str !== 'string') {
      throw Error('Feed me string')
    } else if (!str) {
      return ''
    } else {
      return str
        .split(' ')
        .map(s => {
            if (s.length == 1 ) {
                return s.toUpperCase()
            } else {
                const firstLetter = s.split('')[0].toUpperCase()
                const restOfStr = s.substr(1, s.length).toLowerCase()
                return firstLetter + restOfStr
            }     
        })
        .join(' ')
    }
}


capitalize('THIS IS A BOOK') // => This Is A Book
capitalize('this is a book') // => This Is A Book
capitalize('a 2nd 5 hour boOk thIs weEk') // => A 2nd 5 Hour Book This Week

แก้ไข: ปรับปรุงความสามารถในการอ่านของแผนที่


คุณช่วยอธิบายได้ไหมว่าทำไมคุณคิดว่าคำตอบของคุณดีกว่าคำตอบเมื่อหลายปีก่อน?
vsync

คุณช่วยอธิบายได้หรือไม่ว่าทำไมคุณคิดว่าฉันหมายความว่าคำตอบของฉันดีที่สุดหรือดีกว่าคำตอบอื่น ๆ ฉันไม่ได้พูดถึงมันแตกต่างกัน นอกจากนี้ฉันไม่เห็นคุณแสดงความคิดเห็นนี้ในโพสต์อื่น ๆ ดังนั้นฉันไม่ได้รับมันจริงๆ แต่สำหรับผู้เริ่ม: มันใช้คุณสมบัติ js ที่ทันสมัย ​​(การทำลายล้าง, ลูกศรอ้วน, ผลตอบแทนโดยปริยาย), มันไม่ได้ใช้ regx และเป็นวิธีการทำงานที่มีปัญหามากขึ้น นอกจากนี้ยังมีข้อผิดพลาดพื้นฐานในการจัดการและส่งคืนสตริงที่ว่างเปล่าหากคุณส่งมันหนึ่ง (สำหรับฉันนั่นสำคัญ)
ลด

มันก็โอเคที่จะแตกต่างกัน แต่มันจะต้องดีกว่าหรือเท่ากับคำตอบอื่น ๆ และดูเหมือนจะเป็น ... อ่านไม่ได้และแน่นอนไม่มีใครจะใส่รหัสการผลิตเพราะไม่มีใครจะสามารถเข้าใจได้
vsync

Ahhh ok 50% ของการแก้ปัญหาที่นี่ซึ่ง monkeypatch String คุณจะใส่ในการผลิตจริง ๆ ? หรืออาจจะเป็นการแสดงออกที่ซับซ้อน regex? มันง่ายกว่าที่จะให้เหตุผลด้วยใช่ไหม อย่าเลย! นอกจากนี้ยังบอกว่าไม่มีใครจะเข้าใจสิ่งนี้เป็นคำพูดที่ค่อนข้างอัตนัย นอกจากนี้คุณยังบอกว่ามันเป็นชิ้นส่วนของรหัส (คุณสมบัติเพิ่มเติม แต่ไม่ใช่ในกรณีนี้) วิธีการที่จะฉีกเป็นชิ้น ๆ และวิธีการแก้ปัญหาของฉันจะไม่มีใครเข้าใจ? ไม่มีทางที่คุณจะแก้ให้หายยุ่ง Regexes เหล่านั้นโดยไม่สูญเสียชั่วโมง
ลด

รหัสนั้นเขียนโดย Mr. Resig ด้วยตัวเองและไม่ควรตั้งคำถาม ในทางกลับกันคุณขาดความน่าเชื่อถือเนื่องจากการไม่เปิดเผยชื่อของคุณ ไม่ว่าโซลูชันของ Regex นั้นจะสั้นกว่าทำงานเร็วกว่าและทุกคนที่ได้เรียนรู้พื้นฐานของ Regex ก็อ่านได้อย่างง่ายดาย แทบจะไม่ได้ "แก้ให้หาย" ในเรื่องนี้: /\b\w/g...
vsync

1

วิธีการแก้ปัญหานี้ไม่ได้ใช้ regex รองรับตัวอักษรเน้นเสียงและรองรับเกือบทุกเบราว์เซอร์

function capitalizeIt(str) {
    if (str && typeof(str) === "string") {
        str = str.split(" ");    
        for (var i = 0, x = str.length; i < x; i++) {
            if (str[i]) {
                str[i] = str[i][0].toUpperCase() + str[i].substr(1);
            }
        }
        return str.join(" ");
    } else {
        return str;
    }
}    

การใช้งาน:

console.log (capitalizeIt ('çao 2nd ภายในโปรแกรม Javascript'));

เอาท์พุท:

โปรแกรมจาวาสคริปต์ภายใน 2ndao 2nd


1
วิธีนี้ใช้ทรัพยากร CPU จำนวนมาก JavaScript ไม่เปลี่ยนค่าดั้งเดิมซึ่งแสดงถึงการสร้างขึ้นใหม่ทุกครั้งที่มีการดำเนินการ ควรใช้ฟังก์ชั่นดั้งเดิมเช่น "replace ', exempli gratia
Daniel Bandeira

0

http://www.mediacollege.com/internet/javascript/text/case-capitalize.htmlเป็นหนึ่งในคำตอบมากมาย

Google สามารถเป็นทุกสิ่งที่คุณต้องการสำหรับปัญหาดังกล่าว

วิธีการที่ไร้เดียงสาคือการแยกสตริงด้วยช่องว่างใช้อักษรตัวแรกของแต่ละองค์ประกอบของอาร์เรย์ผลลัพธ์และรวมเข้าด้วยกัน สิ่งนี้ทำให้การใช้อักษรตัวพิมพ์ใหญ่ที่มีอยู่เพียงอย่างเดียว (เช่น HTML ยังคงเป็น HTML และไม่กลายเป็นเรื่องโง่ ๆ เหมือน Html) หากคุณไม่ต้องการให้มันกระทบให้เปลี่ยนทั้งสายเป็นตัวพิมพ์เล็กก่อนที่จะแยกมันออก


0

รหัสนี้ใช้อักษรตัวพิมพ์ใหญ่คำหลังจากจุด:

function capitalizeAfterPeriod(input) { 
    var text = '';
    var str = $(input).val();
    text = convert(str.toLowerCase().split('. ')).join('. ');
    var textoFormatado = convert(text.split('.')).join('.');
    $(input).val(textoFormatado);
}

function convert(str) {
   for(var i = 0; i < str.length; i++){
      str[i] = str[i].split('');
      if (str[i][0] !== undefined) {
         str[i][0] = str[i][0].toUpperCase();
      }
      str[i] = str[i].join('');
   }
   return str;
}

0

ฉันชอบไปด้วยกระบวนการที่ง่าย ก่อนอื่นให้เปลี่ยนสตริงเป็น Array เพื่อให้ง่ายขึ้นซ้ำแล้วใช้ฟังก์ชั่นแผนที่เปลี่ยนแต่ละคำตามที่คุณต้องการ

function capitalizeCase(str) {
    var arr = str.split(' ');
    var t;
    var newt;
    var newarr = arr.map(function(d){
        t = d.split('');
        newt = t.map(function(d, i){
                  if(i === 0) {
                     return d.toUpperCase();
                    }
                 return d.toLowerCase();
               });
        return newt.join('');
      });
    var s = newarr.join(' ');
    return s;
  }

0

Jquery หรือ Javascipt ไม่มีวิธีการในตัวเพื่อให้ได้สิ่งนี้

การทดสอบการแปลง CSS (การแปลงข้อความ: พิมพ์ใหญ่;) ไม่ได้ใช้ประโยชน์จากข้อมูลของสตริงอย่างแท้จริง แต่แสดงการแสดงผลที่เป็นตัวพิมพ์ใหญ่บนหน้าจอ

หากคุณกำลังมองหาวิธีที่ถูกต้องมากขึ้นในการบรรลุเป้าหมายในระดับข้อมูลโดยใช้ vanillaJS แบบธรรมดาให้ใช้วิธีนี้ =>

var capitalizeString = function (word) {    
    word = word.toLowerCase();
    if (word.indexOf(" ") != -1) { // passed param contains 1 + words
        word = word.replace(/\s/g, "--");
        var result = $.camelCase("-" + word);
        return result.replace(/-/g, " ");
    } else {
    return $.camelCase("-" + word);
    }
}


0

คุณสามารถใช้คำต่อไปนี้เพื่อพิมพ์คำให้เป็นตัวพิมพ์ใหญ่ในสตริง:

function capitalizeAll(str){

    var partes = str.split(' ');

    var nuevoStr = ""; 

    for(i=0; i<partes.length; i++){
    nuevoStr += " "+partes[i].toLowerCase().replace(/\b\w/g, l => l.toUpperCase()).trim(); 
    }    

    return nuevoStr;

}

0

นอกจากนี้ยังมี locutus: https://locutus.io/php/strings/ucwords/ซึ่งกำหนดด้วยวิธีนี้:

function ucwords(str) {
  //  discuss at: http://locutus.io/php/ucwords/
  // original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
  // improved by: Waldo Malqui Silva (http://waldo.malqui.info)
  // improved by: Robin
  // improved by: Kevin van Zonneveld (http://kvz.io)
  // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
  // bugfixed by: Cetvertacov Alexandr (https://github.com/cetver)
  //    input by: James (http://www.james-bell.co.uk/)
  //   example 1: ucwords('kevin van  zonneveld')
  //   returns 1: 'Kevin Van  Zonneveld'
  //   example 2: ucwords('HELLO WORLD')
  //   returns 2: 'HELLO WORLD'
  //   example 3: ucwords('у мэри был маленький ягненок и она его очень любила')
  //   returns 3: 'У Мэри Был Маленький Ягненок И Она Его Очень Любила'
  //   example 4: ucwords('τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός')
  //   returns 4: 'Τάχιστη Αλώπηξ Βαφής Ψημένη Γη, Δρασκελίζει Υπέρ Νωθρού Κυνός'

  return (str + '').replace(/^(.)|\s+(.)/g, function ($1) {
    return $1.toUpperCase();
  });
};

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.