javascript正则表达式不适用于句子字符串

时间:2012-12-08 05:48:28

标签: javascript jquery

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

2 个答案:

答案 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给出的正则表达式建议,你还要做以下事情(为了满足检查每个单词的需要......假设单词只是空格或制表符分隔:

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

    ,则返回成功

    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 ......)