2011-11-30 125 views
36

Javascript中可能發現單詞的第一個字母是否是大寫字母?檢查單詞的第一個字母是否是大寫字母

+0

在這裏檢查http://stackoverflow.com/questions/1027224/how-can-i-test-if-a-letter-in-a-string-is-uppercase-or-lowercase-using- javascrip – Cyclonecode

+1

編輯:是的。試試'/^[AZ] /。test(短語)'([here](http://jsfiddle.net/uAwQL/1/)) –

+1

@DavidRodrigues潛在陷阱陷阱,'[AZ]'不匹配重音或非ASCII大寫字母,看到新的答案http://stackoverflow.com/a/39292247/568458 – user568458

回答

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

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

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

toUpperCase()test()

+5

+ 1使用正則表達式 – hafichuk

+1

@hafichuk感謝編輯。對文檔的引用總是一個改進。 –

+0

看起來像第一個選項是最快的。 http://jsperf.com/check-capital – Johnston

7

是。

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

推薦使用,因爲在Chrome中對於「È」(E with a grave)和「ζ」(非大寫zeta)等Unicode字符進行少量測試似乎可行。 –

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

你能做到在幾個方面:

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 */ } 

注意,陣列式訪問的字符,如myWord[0]是的ECMAScript 5功能,並在舊的瀏覽器不支持,所以(現在)我可能會推薦.charAt()方法。

如果你需要做這個測試有很多你可以做一個小功能:

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

此頁面上的其他答案都很好,已知只包含非重音A-Z的字母串。如果你不能保證這一點(例如用戶輸入),他們可能會給出意想不到的結果:誤報爲「1940s」或「中文」等不適用的首字母縮寫,或者重音或非羅馬首字母例如「Łukasz」或「 Александра」。

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

使用.charAt(0)代替[0]if you need IE8 support:如果最初是任何大寫字母,以及只有如果它是一個大寫字母

這個變種返回true。其中is faster varies between browsers

這避免了與其他回答了兩個潛在的陷阱:使用[A-Z]

  • 的正則表達式將無法匹配重音和其他類似的非AZ大寫字母,如奧蘭(斯堪的納維亞羣島)和盧卡斯(通用波蘭語名稱),包括非拉丁字母的大寫字母,如西裏爾字母或希臘字母(例如Александра)。

  • 使用word[0] === word[0].toUpperCase()在某些詞的做法,將在與非字母開頭的單詞返回true,如,,123reg(公司名稱),像縮寫2mrw,或一些非洲語言,如!xūúnǂǐ-sì。它還會將字母表中沒有大寫字母的任何輸入視爲大寫字母(例如,中文)。

由於這個任意輸入安全的方法也很簡單,並沒有比其它的可讀性,它可能更好地使用這個,即使你不預期這些例外。

下面是一個簡單的測試:

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

這可能會回答這個問題,但也請提供一個簡短說明,代碼的作用以及爲什麼它解決了最初的問題。 – user1438038

2

僅供英語字母:

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

意義,[97 65之間,每隔數)大寫字母:

function startsWithCapitalLetter(word) { 
    return word.charCodeAt(0) >= 65 && word.charCodeAt(0) < 97; 
} 
相關問題