60

是否可以在 JavaScript 中找出单词的第一个字母是否为大写字母?

4

8 回答 8

112

更新

用我认为是当今最有效的方法进行更新。

如果支持适合您,您可以使用Unicode 属性转义正则表达式。在这种情况下,您可以将General 类别属性用于 Uppercase Letter 。Lu

function isUppercase(word){
  return /^\p{Lu}/u.test( word );
}

较旧的答案

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

于 2011-11-30T23:40:10.497 回答
34

此页面上的其他答案适用于已知仅包含非重音 AZ 字母的字符串。如果你不能保证这一点(例如用户输入),他们可能会给出意想不到的结果:对于像“1940s”或“English”这样的不可大写首字母的误报,或者像“Łukasz”或“这样的重音或非罗马大写首字母的误报” Александра”。

如果首字母是任何大写字母,并且当它是大写字母时,此变体返回 true :

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

如果您需要 IE8 支持,请使用.charAt(0)而不是。哪个更快因浏览器而异[0]

这避免了其他答案的两个潜在陷阱:

  • 使用的正则表达式[A-Z]将无法匹配重音字母和其他类似的非 AZ 大写字母,例如 Åland(斯堪的纳维亚群岛)和Łukasz(波兰通用名称),包括非拉丁文字中的大写字母,例如西里尔字母或希腊字母(例如Александра)。

  • 使用word[0] === word[0].toUpperCase(), 的方法将对以非字母开头的单词返回 true,例如1940s17th123reg(公司名称)、缩写(例如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 

于 2016-09-02T12:17:32.363 回答
12

仅限英文字母:

'A' => 65
'Z' => 90

意思是,[65, 90] 之间的每个数字都是大写字母:

function startsWithCapitalLetter(word) {
  return word.charCodeAt(0) >= 65 && word.charCodeAt(0) <= 90;
}
于 2017-10-04T13:57:07.950 回答
8

是的。

var str = "Hello";
if(str[0].toUpperCase() == str[0])
{
   window.alert('First character is upper case.');  
}
于 2011-11-30T23:40:33.613 回答
5

您可以通过以下几种方式做到这一点:

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 */ }
于 2011-12-01T00:43:06.670 回答
2

使用match字符串对象原型的方法:

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

于 2017-07-25T15:32:50.127 回答
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');
于 2011-11-30T23:43:04.040 回答
0

打字稿

//userEntry input as string
//return boolean
oneUppercaseRequired(userEntry: string): boolean {
   const letters = /[A-Z]/;

   if (letters.test(userEntry[0]))
     return true;

   return false;
}

其他语言的 for-loop将语法更改为您的语言!

//userEntry param as string
//return boolean
oneUppercaseRequired(userEntry: string): boolean {
   const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

   for (let i = 0; i < letters.length; i++) {
     if (userEntry[0] == letters[i])
       return true;
   }

   return false;
}
于 2020-08-16T14:20:55.470 回答