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

Mic*_*elH 22 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);
Run Code Online (Sandbox Code Playgroud)

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

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

Ry-*_*Ry- 34

你想要的RegExp.test,它测试匹配的值而不是检索匹配.使用现有代码,这意味着:

if(!new RegExp(regex).test(value)){
    alert('Your string was invalid.');
}
Run Code Online (Sandbox Code Playgroud)

但是,最好使用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.');
}
Run Code Online (Sandbox Code Playgroud)

更好的是,使用字典:

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

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

  • 我将正则表达式模式放在单引号内,这是我的问题...... :D) (2认同)

kev*_*nji 13

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

regex = /^[a-zA-Z]+$/;
Run Code Online (Sandbox Code Playgroud)

有关使用的更多信息,请参阅MDN的页面.match.match.