我正在学习javascript和Regex并尝试验证输入,如果字符串中的第一个字母是大写的。
我现在的正则表达式是:var patt1=/[A-Z]{4}$/;
但如果所有四个字母都是大写字母而不是第一个字母,则验证字符串。
知道如何让它发挥作用。
注意:我也在检查输入应该是4个字母长。
答案 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 );
}
当然,这就提出了一个问题,即我们是否准确列出了每种语言的所有大写字符!