我在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 + '}$/')
我也尝试使用双引号而不是单引号(不确定regex是否将单引号视为保留或其他内容)。
如果我删除引号并为变量输入数字,它可以正常工作:
new RegExp(/^[\w.-]{3,24}$/)
的jsfiddle: http://jsfiddle.net/88ef3/
答案 0 :(得分:3)
使用RegExp
构造函数从字符串构建正则表达式时,必须转义斜杠:
new RegExp('^[\\w.-]{' + min_length + ',' + max_length + '}$');
请记住,javascript字符串中的斜杠用于转义,但在这里你想要slah作为一个字符,所以你必须自行转义。
答案 1 :(得分:1)
new RegExp('^[\\w.-]{' + min_length + ',' + max_length + '}$')
答案 2 :(得分:0)
这可能会有所帮助
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';