我正在编写一个以字符串作为参数的函数。然后,如果字符串以大写字母开头,则返回true,否则返回false。但是我当前的函数只适用于一个单词字符串,我希望它能同时用于一个单词和一个整句。如何改进我的代码来实现这一目标?其次,当数字在句子内传递时,它不应该起作用。我怎么能这样做?
这是我的代码
function takeString (str) {
var regex = /^[A-Za-z]+$/;
if (str.match(regex)) {
if (str.charAt(0) === str.toUpperCase().charAt(0)) {
alert('true');
return true;
} else {
alert('false');
return false;
}
} else {
alert('Only letters please.');
}
}
takeString('This is'); // shows Only letters please which is wrong. this should work
takeString('String); // returns true which right
takeString('string'); // returns false which is right
takeString('This is 12312321'); // shows only letters please which is right bcoz it has digits
takeString('12312312'); // show Only letters please which is right.
答案 0 :(得分:3)
空格不是字母。您必须将它们添加到您的字符集中:
> 'This is a string'.match(/^[A-Za-z]+$/);
null
> 'This is a string'.match(/^[A-Za-z\s]+$/);
["This is a string"]
\s
匹配所有空格,因此如果您不想匹配标签,请用空格替换\s
。
以下是您的代码的稍微简化版本:
function takeString(str) {
return str.match(/^[A-Z][A-Za-z ]*$/);
}
答案 1 :(得分:0)
连同Blender给出的正则表达式建议,你还要做以下事情(为了满足检查每个单词的需要......假设单词只是空格或制表符分隔:
如果您匹配每个单词
,则返回成功takeString(str){
var mywords = str.split(/ \ s + /); for(i = 0; i< mywords.length; i ++){ if(str.match(/ ^ [A-Z] [A-Za-z] * $ /)!= true){ 返回false; } } 返回true; }
(有人需要检查我的js ......)