-2

我正在学习 javascript 和 Regex,并尝试验证字符串中的第一个字母是否为大写的输入。

我目前的正则表达式是:var patt1=/[A-Z]{4}$/;

但是,如果所有四个字母都是大写的,而不仅仅是第一个字母,这将验证字符串。

任何想法如何使它工作。

注意:我也在检查输入应该是 4 个字母长。

4

2 回答 2

5

如果“大写”是指 AZ 中的字母,那么您可以使用

var isFirstLetterUppercase = /^[A-Z]/.test(yourString);

这里的想法(以及在类似情况下)是使用^与字符串开头匹配的。

如果您还想检查字符串的长度,可以使用:

var isOK = /^[A-Z].{3}$/.test(yourString);

这里,.{3}表示 3 个字符,$是字符串的结尾。

于 2013-08-25T06:31:58.117 回答
5

在正则表达式中使用 AZ 测试的问题在于 AZ 不是唯一的大写字母。

想想德国的乌伯林根市。第一个字母肯定是大写的,但它不在A 到 Z 的范围内。在 JavaScript 控制台中试试:

/^[A-Z]/.test('Überlingen');  // logs false - oops!

现在这里有点棘手。字母大写到底是什么意思?用英语很简单:AZ vs. az。在德语中,Ü(例如)是大写字母,ü 是小写字母。对于像这些同时具有大写和小写字符的语言,您可以通过使用方法将字符转换为小写.toLowerCase()并将其与原始字符进行比较来测试字符是否为大写。如果它们不同,则原始为大写。如果它们相同,则原始字符要么是小写字符,要么是没有大小写版本的字符(例如数字或标点符号)。

// 'char' is a string containing a single character
function isUpperCase( char ) {
    return char !== char.toLowerCase();
}

.charAt()现在您可以通过提取该字符并调用来测试字符串的第一个字符是否为大写isUpperCase()

function beginsWithUpperCase( string ) {
    return isUpperCase( string.charAt(0) );
}

这适用于德国城市:

beginsWithUpperCase( 'Überlingen' );  // logs `true`.

现在,由于我们根本没有使用正则表达式,如果您想检查字符串长度,只需使用以下.length属性:

function fourCharactersWithFirstUpperCase( string ) {
    return string.length === 4  &&  beginsWithUpperCase( string );
}

fourCharactersWithFirstUpperCase( 'über' );  // logs false
fourCharactersWithFirstUpperCase( 'Über' );  // logs true
fourCharactersWithFirstUpperCase( 'Überlingen' );  // logs false

因此,对于具有相同字符的大写和小写版本的语言,我们处于良好状态。但是没有大写和小写字符的语言?然后此代码将返回false任何字符串。

我没有一个很好的解决方案。您必须考虑如何处理这种情况。

顺便说一句,如果你真的想用正则表达式尝试这个,这个答案中有一种可能的方法。您可以列出您可能需要处理的语言中的所有大写字母,而不只是测试 AZ 。根据该答案调整正则表达式,它可能如下所示:

function beginsWithUpperCase( string ) {
    return /^[A-ZÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöüçÇßØøÅåÆæÞþÐð]/.test( string );
}

当然,这提出了一个问题,即我们是否准确地列出了每种语言的所有大写字符!

于 2013-08-25T16:04:00.530 回答