Javascript 带有正则表达式的.match()返回null

Javascript 带有正则表达式的.match()返回null,javascript,regex,Javascript,Regex,我正在尝试做一些我认为很容易做到的事情,就是通过匹配正则表达式将字符串限制为特定字符 var value = 'FailureStr1ng'; var type = 'ALPHA'; var regex = null; switch(type) { case 'ALPHA': regex = '^[a-zA-Z]+$'; break; case 'NUMERIC': regex = '^[0-9]+$'; brea

我正在尝试做一些我认为很容易做到的事情,就是通过匹配正则表达式将字符串限制为特定字符

var value = 'FailureStr1ng';
var type = 'ALPHA';
var regex = null;

switch(type) {
    case 'ALPHA':
        regex = '^[a-zA-Z]+$';
        break;
    case 'NUMERIC':
        regex = '^[0-9]+$';
        break;
    case 'ALPHANUMERIC':
        regex = '^[a-zA-Z0-9]+$';
        break;
}

return value.match(regex);
出于某种原因,在使用匹配时,它总是返回
null
。有没有办法解决这个问题,或者有更好的方法


注意:这里的代码是一段大得多的代码,而值和类型变量通常由另一个方法定义。

您需要
RegExp.test
,它测试匹配的值,而不是检索匹配。对于您现有的代码,这意味着:

if(!new RegExp(regex).test(value)){
    alert('Your string was invalid.');
}
但是,最好使用RegExp文本而不是字符串,因为它们更高效、更清晰,更不容易出错:

var value = 'FailureStr1ng';
var type = 'ALPHA';
var regex = null;

switch(type) {
    case 'ALPHA':
        regex = /^[a-zA-Z]+$/;
        break;
    case 'NUMERIC':
        regex = /^[0-9]+$/;
        break;
    case 'ALPHANUMERIC':
        regex = /^[a-zA-Z0-9]+$/;
        break;
}

if(!regex.test(value)) {
    alert('Your string was invalid.');
}
更好的方法是使用字典:

var expressions = {
    ALPHA: /^[a-zA-Z]+$/,
    NUMERIC: /^[0-9]+$/,
    ALPHANUMERIC: /^[a-zA-Z0-9]+$/
};

if(!expressions[type].test(value)) {
    alert('Your string was invalid.');
}

Regex必须用
/
包围,而不是
'
,这样JavaScript就可以创建Regex类型的变量,而不是string类型的变量。例如,对于你的ALPHA案例,你应该

regex = /^[a-zA-Z]+$/;

有关使用
.match
的详细信息,请参阅。您的代码看起来像是在
函数{…}
中。您是否返回任何内容?如果没有,这就是为什么您将返回
null


另外,正则表达式被斜杠(
/…/
)包围,而不是引号。

我现在已经修复了代码,我的意思是value.match(正则表达式)返回null。不是函数。从不返回任何内容的函数返回的值是
undefined
,而不是
null
。谢谢,我会尝试一下。它返回null,因为字符串中有
1
,所以它不匹配。将其更改为有效字符串将返回该字符串。我把正则表达式模式放在单引号中,这是我的问题…:(D)