我正在尝试做一些我认为很容易做的事情,即通过匹配正则表达式将字符串限制为某些字符。
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
。有没有办法解决这个问题,或者更好的方法来解决这个问题?
注意:此处的代码是更大代码的代码段,而值和类型变量通常由另一个方法定义。
答案 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
的原因......
此外,正则表达式由斜杠(/.../
)包围,而不是引号。