2017-04-13 61 views
1

我有一个正则表达式,我试图用它来控制用户输入,只允许字母A-D(不区分大小写),后面跟1-16之间的数字值。JavaScript中的正则表达式 - 未正确过滤

Ex // A12,C5是有效的条目,但B18将与H2一样无效。

我正在使用的正则表达式根据字母值标记不正确的输入,但不是数字 - 所以在我之前的示例中它正确标记H2,但允许输入B18。

我对于正则表达式相当陌生,所以我不确定我误入歧途的地方。任何帮助将不胜感激!

我目前的表达式如下:

var regex = new RegExp(/([A-Da-d]{1}[1-9]{1}|[A-Da-d]{1}[1]{1}[0-6]{1})/); 

再次感谢!

+1

顺便说一句,如果你传递的东西是正则表达式,就不需要调用'RegExp()'函数。只是说'var regex = /([A-etc ./;' – nnnnnn

回答

0

你可以使用正则表达式像这样与不敏感的标志:

^[a-d](?:1[0-6]|[0-9])$ 

Working demo

+0

这个修正了它。谢谢! – gothamprince

+0

你能否也请告诉我我哪里出错了与我原来的正则表达式模式?只是试图学习,所以我可以提高我自己的能力, – gothamprince

+0

@gothamprince,你的模式的第一部分匹配从1到9,而不允许第二部分的比赛。你的情况,你的组的顺序很重要,另外,你使用了很多不需要的'{1}',你可以在这里查看你的正则表达式[Debuggex Demo](https://www.debuggex.com/r/D8OBAukztSIYLFOq),因为您可以看到第一组总是匹配而不允许第二部分。此外,如果您使用锚点,它可能会工作 –

1

这个表达式将做到这一点:

/^[A-D]([1-9]|1[0-6])$/i 

var re = /^[A-D]([1-9]|1[0-6])$/i; 
 

 
console.log(re.test('A12')); 
 
console.log(re.test('C5')); 
 
console.log(re.test('H12')); 
 
console.log(re.test('B18'));

+0

@AndrewShepherd在我的正则表达式的末尾有一个'i'国旗。 –