2014-06-22 67 views
2

我在StackOverflow上发现了很多关于如何执行此操作的问题,但它只是对我无效。将变量插入到正则表达式字符串中

var username = "abcdefg"; 
var min_length = 3; 
var max_length = 24; 
var regex = new RegExp('^[\w.-]{' + min_length + ',' + max_length + '}$'); 
if (regex.test(username)) 
    document.getElementById('status').innerHTML = 'match'; 
else 
    document.getElementById('status').innerHTML = 'no match'; 

我也用斜杠试图前后:

new RegExp('/^[\w.-]{' + min_length + ',' + max_length + '}$/') 

而且我也试过用双引号代替单引号(不知道正则表达式对待单引号为保留或某事)。

如果我删除引号,并把在数字为变量正常工作:

new RegExp(/^[\w.-]{3,24}$/) 

的jsfiddle: http://jsfiddle.net/88ef3/

+0

你肯定,如果你只需要输入数字而不是工作? – adeneo

+0

看看这个:http://jsfiddle.net/88ef3/1/ – Gavin

+0

你在包括'/'在你的模式在jsfiddle –

回答

3

当您使用RegExp构造函数从字符串构建一个正则表达式,你必须避免斜线:

new RegExp('^[\\w.-]{' + min_length + ',' + max_length + '}$'); 

请记住,JavaScript字符串中的斜杠用于esc猿,但在这里你想把这个slah作为一个角色,所以你必须逃避自己。

Demo

+0

这样做!谢谢。 10分钟后,我会接受。 – Gavin

+1

@Gavin还从其他评论中注意到,您在'RegExp'构造函数中不使用'/',因为'/'是正则表达式文本的分隔符。 –

+0

这就是我的想法,我只是无法弄清楚为什么这不起作用,所以我尝试了所有我能想到的。 – Gavin

1
new RegExp('^[\\w.-]{' + min_length + ',' + max_length + '}$') 
+2

谢谢,但Oriol击败你:) – Gavin

1

这可能有助于

var username = "abcdefg"; 
var min_length = 3; 
var max_length = 24; 
var str1='^[\\w.-]{'+min_length+','+max_length+'}$'; 
var regex = new RegExp(str1,"i"); 
if (regex.test(username)) 
    document.getElementById('status').innerHTML = 'match'; 
else 
    document.getElementById('status').innerHTML = 'no match'; 

http://jsfiddle.net/Et7J8/

相关问题