7

我有一个函数,我首先检查作为参数传递的字符串是否只有字母。但它总是返回为假。下面是我的jsfiddle

function takeString (str) {
    var regex = "/^[A-Za-z]+$/";

    if (str.match(regex)) {
        if (str.charCodeAt(0) === str.toUpperCase().charCodeAt(0)) {
            alert('true');
            return true;
        } 
        else {
            alert('false');
            return false;
        }
    } 
    else {
        alert('Only letters please.');
    }
}

takeString('string');

​ 上面的代码总是提醒Only letters please

4

1 回答 1

9

您需要去掉引号来制作regex正则表达式文字:

var regex = /^[A-Za-z]+$/;

这是一个更新的小提琴

目前,regex指的是字符串文字。当您将不是正则表达式对象或文字的内容传递给 时String#match,它会将该参数隐式转换为正则表达式对象(请参阅ES5 15.5.4.10):

  • 如果 Type( regexp ) 为 Object 且regexp的 [[Class]] 内部属性的值为,则令rxregexp"RegExp"
  • 否则,设rx是一个新的 RegExp 对象,就像由表达式new RegExp( regexp)创建的一样,其中RegExp是具有该名称的标准内置构造函数。

因此,您的正则表达式被解释为这样(因为字符串包含您希望分隔正则表达式文字的正斜杠字符):

var regex = /\/^[A-Za-z]+$\//;

那不能匹配任何东西,因为它正在寻找一个正斜杠,然后是字符串的开头。

于 2012-12-06T13:44:25.110 回答