2017-04-10 65 views
0

我想要做的是只允许以3位或4位数字为增量100JS正则表达式只允许增量为100

我得到如何去做到某一点,但我认为会工作并不实际工作,因为我在测试时没有找到匹配。我想我现在明白了为什么,但现在我有点困惑,为了实现我的目标该怎么做。

所以我想要做的只是允许在输入100增量,例如3700将有效,但3723不会。

我想出了这个:^[0-9]{1,2}[0]{2}$。任何帮助将非常感激。

+1

那么,什么是真正不对您的正则表达式?当它的行为不像你期望的那样时,情况如何?我可以想象一些情况,但猜测不是它应该如何工作 - 如果你想获得帮助,你需要让问题清晰和可重现。 –

回答

3

为简单起见,你需要匹配(按顺序):

  1. 一个非零数字[1-9]
  2. (可选)后跟一个数字\d?
  3. 接下来是两个零00(或0{2},如你所愿)。

在这里你去:

^[1-9]\d?00$ 

另外,这可能不是你的情况,因为你说你要匹配三个或四个数字,但如果你也想匹配0(零):

^(0|[1-9]\d?00)$ 

测试片断(零除外)

var inp = document.getElementById('inp'), 
 
    res = document.getElementById('res'), 
 
    btn = document.getElementById('btn'), 
 
    exp = /^[1-9]\d?00$/; 
 

 
function test(e) { 
 
    res.textContent = exp.test(inp.value) ? "Valid." : "Invalid."; 
 
} 
 

 
btn.addEventListener('click', test); 
 
inp.addEventListener('change', test);
<input id="inp"> <button id="btn">Submit</button> 
 
<p id="res"></p>

+0

我没有看到这个正则表达式工作https://regex101.com/r/39B8mC/1 – DCdaz

+0

@DCdaz这是因为你需要指定多行('m')修饰符,如果你想测试它更多行,使行被视为分离的输入字符串。如果你没有指定它,正则表达式中的'$'标记将会使它失败,因为输入是一次全部评估的。看看** [这里](https://regex101.com/r/39B8mC/2)**。 –

+0

感谢队友,以此回答 – DCdaz

1

这应该符合你的需要:^[1-9][0-9]?00$

Here is a sample上regex101

3100 // match 
320 
3320 
100 // match 
230 
500 // match 
5000 // match 
1245 
000 
0000 
50002 
50000 
12000 
+0

已修复!为什么downvote现在起作用?:( –

+0

我想这是因为它会匹配'0000' – strah

+0

再次修正,thanx指向此^^ –

1

所以,你的号码必须是#000#..#000。所以/^([1-9]00|[1-9]\d+00)$/


OR简单number mod 100 == 0

var input = prompt('Enter number'); 
 

 
if (input.match(/[^\d]/) || input % 100 != 0) { 
 
    alert('Wrong input.'); 
 
} else { 
 
    alert('Correct input'); 
 
}

+0

'\ d +'会匹配第一个数字后面的一个或多个数字。 OP表示总位数可以是3或4. –

+0

为您提供了使用模100 – Toto