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

时间:2011-12-29 03:50:59

标签: 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]+$';
        break;
    case 'ALPHANUMERIC':
        regex = '^[a-zA-Z0-9]+$';
        break;
}

return value.match(regex);

出于某种原因,当使用匹配时,它总是返回null。有没有办法解决这个问题,或者更好的方法来解决这个问题?

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

3 个答案:

答案 0 :(得分:32)

您需要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.');
}

答案 1 :(得分:10)

正则表达式必须包含/,而不是',以便JavaScript创建类型为regex的变量,而不是字符串类型。例如,对于您的ALPHA案例,您应该

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

有关使用.match的详细信息,请参阅MDN's page on .match

答案 2 :(得分:1)

您的代码看起来像是在function { ... }内。你return有什么事吗?如果没有,那就是你得到null的原因......

此外,正则表达式由斜杠(/.../)包围,而不是引号。