2017-02-16 84 views
0

这应该很简单。我有以下代码:Javascript RegEx for Pattern Not Working

var patt = new RegExp("\d{3}[\-]\d{1}"); 
var res = patt.test(myelink_account_val); 
if(!res){ 
    alert("Inputs must begin with something like XXX-X of numbers and a dash!"); 
    return; 
} 

基本上,迫使用户输入类似101-4的东西。该代码是从Social Security Number input validation借用的。我可以确认我的投入确实如101-4;只有前五个字符需要适合该模式。

但始终运行我的代码给出了警报 - 条件是永远不会匹配。

必须是简单的东西?

谢谢。

+2

使用'变种PATT =/^ \ d {3} - \ d $ /'如果整个输入应该匹配的模式。如果只应开始使用它,使用'VAR PATT =/^ \ d {3} - \ d /' –

+5

,如果您使用一个字符串,那么你需要躲避'\'所以你必须写'一个正则表达式\ \ d'' –

+0

/^ \ d {3} - \ d {1} $ /'....嗯基本上他写的东西 –

回答

1

当您使用 “新正则表达式” 你是传递一个字符串。这里

两个解决方案:

1)不要使用 “新的RegExp()”,但正则表达式模式:如果你想使用它

var patt = /\d{3}[\-]\d{1}/ 

2),请记住,你将有为了躲避逃逸:

var patt = new RegExp("\\d{3}[\\-]\\d{1}"); 

此外,还要记住,如果是“ - ”是唯一的符号(或第一或最后一个)上的[],你可以跳过逃生:

var patt = new RegExp("\\d{3}[-]\\d{1}"); 
1

var patt = new RegExp("^\\d{3}[\\-]\\d{1}"); 
 
console.log(patt.test("123-4")); 
 
console.log(patt.test("123-456")); 
 
console.log(patt.test("12-4")); 
 
console.log(patt.test("abc-d"));