2011-11-30 84 views
36

Có thể trong Javascript để tìm hiểu xem chữ cái đầu tiên của từ có phải là chữ cái viết hoa không?Kiểm tra xem chữ cái đầu tiên có phải là chữ cái viết hoa

+0

Kiểm tra tại đây http://stackoverflow.com/questions/1027224/how-can-i-test-if-a-letter-in-a-string-is-uppercase-or-lowercase-using- javascrip – Cyclonecode

+1

EDIT: Có. Hãy thử '/^[AZ] /. Test (cụm từ)' ([ở đây] (http://jsfiddle.net/uAwQL/1/)) –

+1

@DavidRodrigues bẫy hố tiềm năng ở đó, '[AZ]' không khớp chữ viết hoa có dấu trọng âm hoặc không phải ASCII, xem câu trả lời mới http://stackoverflow.com/a/39292247/568458 – user568458

Trả lời

76
var word = "Someword"; 
console.log(word[0] === word[0].toUpperCase()); 

hoặc

var word = "Someword"; 
console.log(/[A-Z]/.test(word[0])); 

hoặc

var word = "Someword"; 
console.log(/^[A-Z]/.test(word)); 

Xem toUpperCase()test()

+5

+1 để sử dụng regex – hafichuk

+1

@hafichuk cảm ơn chỉnh sửa. Tài liệu tham khảo cho tài liệu luôn là một cải tiến. –

+0

Có vẻ như tùy chọn đầu tiên là nhanh nhất. http://jsperf.com/check-capital – Johnston

7

Yes.

var str = "Hello"; 
if(str[0].toUpperCase() == str[0]) 
{ 
    window.alert('First character is upper case.'); 
} 
+1

Được đề xuất vì điều này dường như hoạt động, với một lượng nhỏ thử nghiệm trong Chrome, đối với các ký tự Unicode như "È" (E có mộ) và "ζ" (zeta không phải vốn). –

0
var string1 = "this is a string"; 
var string2 = "This is a string"; 

if(string1[0] == string1[0].toUpperCase()) 
    alert('is upper case'); 
else 
    alert('is not upper case'); 


if(string2[0] == string2[0].toUpperCase()) 
    alert('is upper case'); 
else 
    alert('is not upper case'); 
3

Bạn có thể làm điều đó bằng nhiều cách:

var myWord = "Hello"; 

// with string functions 
if (myWord.charAt(0) === myWord.charAt(0).toUpperCase()) { /* is upper */ } 

// or for newer browsers that support array-style access to string characters 
if (myWord[0] === myWord[0].toUpperCase()) { /* is upper */ } 

// with regex - may not be appropriate for non-English uppercase 
if (/^[A-Z]/.test(myWord) { /* is upper */ } 

Lưu ý rằng việc tiếp cận mảng kiểu với những nhân vật như myWord[0] là một tính năng ECMAScript 5 và không được hỗ trợ trong các trình duyệt cũ, vì vậy (cho bây giờ) Tôi có lẽ muốn giới thiệu phương pháp .charAt().

Nếu bạn cần phải làm xét nghiệm này rất nhiều bạn có thể làm một chức năng nhỏ:

function firstLetterIsUpper(str) { 
    var f = str.charAt(0); // or str[0] if not supporting older browsers 
    return f.toUpperCase() === f; 
} 

if (firstLetterIsUpper(myWord)) { /* do something */ } 
12

Những câu trả lời khác trên trang này cũng tốt cho các chuỗi mà được biết là chỉ chứa các chữ không có dấu A-Z. Nếu bạn không thể đảm bảo điều này (ví dụ: đầu vào của người dùng), họ có thể cho kết quả không mong muốn: dương tính giả cho chữ viết tắt không thể chia sẻ như "1940" hoặc "中文" hoặc âm bản sai cho chữ viết tắt có dấu hoặc không phải chữ La Mã như "Łukasz" hoặc " Александра ".

biến thể này trả về true nếu ban đầu là bất kỳ thư vốn, và chỉ nếu đó là một chữ cái viết hoa:

function initialIsCapital(word){ 
    return word[0] !== word[0].toLowerCase(); 
} 

Sử dụng .charAt(0) thay vì [0]if you need IE8 support. Trong đó is faster varies between browsers.

Điều này tránh hai cạm bẫy tiềm năng với các câu trả lời khác:

  • Regexes sử dụng [A-Z] sẽ không phù hợp có dấu và khác tương tự như phi AZ chữ cái tiếng chẳng hạn như trong Åland (đảo Scandinavia) và Łukasz (tên tiếng Ba Lan phổ biến), bao gồm các chữ cái viết hoa trong các chữ viết không phải chữ Latinh như Cyrillic hoặc Greek (ví dụ: Александра).

  • Phương pháp sử dụng word[0] === word[0].toUpperCase(), sẽ trở lại đúng vào những từ mà bắt đầu với không chữ, chẳng hạn như năm 1940, , 123reg (tên công ty), chữ viết tắt như 2mrw, hoặc một số từ trong một số ngôn ngữ Châu Phi, chẳng hạn như ! xūún hoặc ǂǐ-sì. Nó cũng sẽ xử lý bất kỳ đầu vào nào từ một bảng chữ cái không có chữ hoa làm chữ hoa (ví dụ:中文).

Vì cách tiếp cận tùy ý-an toàn này chỉ đơn giản và không dễ đọc hơn các lựa chọn thay thế, có thể tốt hơn nếu bạn không lường trước được ngoại lệ như vậy.

Dưới đây là một thử nghiệm nhanh:

function a(word){ 
 
    return word[0] !== word[0].toLowerCase(); 
 
} 
 
function b(word){ 
 
    return word[0] === word[0].toUpperCase(); 
 
} 
 
function c(word){ 
 
    return /^[A-Z]/.test(word); 
 
} 
 
function test(word, answer){ 
 
    console.log('Should be '+answer+':', a(word), b(word), c(word), '-------', word); 
 
} 
 

 
test('Łukasz', true); // regex test fails, returns false 
 
test('Александра', true); // regex test fails, returns false 
 
test('1940s', false); // .toUpperCase() test fails, returns true 
 
test('中文', false); // .toUpperCase() test fails, returns true 
 

 
test('ß', false); // All pass on German "sharp S" that has no uppercase 
 
test('Z̢̜̘͇̹̭a͎͚͔͕̩̬̭͈͞l̩̱̼̤̣g̲̪̱̼̘̜͟ợ̮̱͎̗̕ͅͅ', true); // All pass. Phew, Zalgo not awakened

-1
let word = 'Someword'; 
console.log(word.match(new RegExp(/^[A-Z]/)) !== null); 
+0

Điều này có thể trả lời câu hỏi, nhưng vui lòng cung cấp giải thích ngắn gọn về mã của bạn và lý do giải thích vấn đề ban đầu. – user1438038

2

Đối tiếng Anh chỉ chữ:

'A' => 65 
'a' => 97 

Ý nghĩa, mỗi số giữa [65, 97) là một chữ cái viết hoa:

function startsWithCapitalLetter(word) { 
    return word.charCodeAt(0) >= 65 && word.charCodeAt(0) < 97; 
} 
Các vấn đề liên quan