0

我正在编写一个将字符串作为参数的函数。然后如果字符串以大写字母开头,则返回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.

​</p>

4

2 回答 2

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 ]*$/);
}
于 2012-12-08T05:51:02.053 回答
0

除了 Blender 给出的正则表达式建议,您还需要执行以下操作(为了满足检查每个单词的需要......假设单词仅以空格或制表符分隔:

  • 使用 split 函数将字符串分解为单词( var mywords = str.split(/\s+/) )
  • 遍历 split 返回的 mywords 数组,根据正则表达式检查每个数组元素
  • 如果正则表达式不匹配,则返回错误
  • 如果匹配每个单词,则返回成功

    取字符串(字符串){

    var mywords = str.split(/\s+/); for (i = 0; i < mywords.length; i++) { if (str.match(/^[AZ][A-Za-z]*$/) != true) { return false; } } 返回真;}

(有人需要检查我的js ...)

于 2012-12-08T06:33:42.737 回答