2011-11-30 118 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; 
} 
相关问题