如何检查第一个字母应该是JS正则表达式中的大写

时间:2013-08-25 06:31:11

标签: javascript regex

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

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

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

知道如何让它发挥作用。

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

2 个答案:

答案 0 :(得分:4)

如果“大写”是指A-Z中的一个字母,那么您可以使用

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

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

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

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

此处,.{3}表示3个字符,$表示字符串的结尾。

答案 1 :(得分:4)

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

考虑德国的Überlingen城市。第一个字母肯定是大写的,但在A到Z的范围内不是。在JavaScript控制台中尝试:

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

现在这里有点棘手。一封信大写是什么意味着什么?在英语中它很简单:A-Z与a-z。在德语中,Ü(例如)是大写的,ü是小写的。对于具有大写和小写字符的类似语言,您可以使用.toLowerCase()方法将字符转换为 lowercase 并将其与原始字符进行比较,从而测试字符是否为大写。如果它们不同,则原件是大写的。如果它们相同,则原件是小写字符或不具有大写和小写版本的字符(例如数字或标点符号)。

// '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

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

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

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

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