最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Java Script Regex ^[^0]d{1,4}$ - Stack Overflow

programmeradmin3浏览0评论

I want to match a number with 1 to 4 digits which doesn't start with 0, using a regular expression in JavaScript. I tried:

^[^0]\d{1,4}$

But this doesn't work.

Is there any problem with {1,4} in JavaScript? It should check digits are matched 1 to 4 times, shouldn't it?

I want to match a number with 1 to 4 digits which doesn't start with 0, using a regular expression in JavaScript. I tried:

^[^0]\d{1,4}$

But this doesn't work.

Is there any problem with {1,4} in JavaScript? It should check digits are matched 1 to 4 times, shouldn't it?

Share Improve this question edited Jun 5, 2015 at 8:46 thodic 2,2691 gold badge20 silver badges38 bronze badges asked Jun 5, 2015 at 8:05 Peyman abdollahyPeyman abdollahy 8291 gold badge9 silver badges18 bronze badges 4
  • 2 [^0] means - any character other than 0 – zerkms Commented Jun 5, 2015 at 8:07
  • ^\d{1,4}$ should work for you. Tested with regexpal. – nilsK Commented Jun 5, 2015 at 8:09
  • @nilsK and i don't want first digit be 0 – Peyman abdollahy Commented Jun 5, 2015 at 8:12
  • 1 Please be more precisely with your questions. Take your time, the people answering your question are doing it too. No offense, but if you are asking yourself why you got down votes, this might be your anser. – nilsK Commented Jun 5, 2015 at 8:32
Add a ment  | 

3 Answers 3

Reset to default 7

Why your regex doesn't work

^[^0]\d{1,4}$ means anything apart from 0 followed by 1 to 4 digits. Therefore the following will match:

  • A6789
  • Z0

The solution

If you want any 1 to 4 digit number but without starting 0s you want:

^(?!0)\d{1,4}$

This will match:

  • 1234
  • 5
  • 99

But not:

  • 0123
  • 005
  • 12345
  • Z123

Why the solution works

(?!0) is a Negative Lookahead which asserts the string doesn't start with the contained pattern, in this case 0.

Your regex is incorrect. There is no problem in Javascript.

Here is the regex you want:

^[1-9]\d{0,3}$

Basically:

  • [1-9] matches any number that isn't 0
  • \d{0,3} will match up to 3 more numbers, from 0 to 9

The regex you have will match these:

  • Z000
  • .123
  • -111
  • ...

Please show us the code that does not work.

This is what you are doing now:

  • One character that is not 0
  • One to four characters that are decimal numbers

So you can produce 5 digits. Yout gotta correct that. We can help you if you provide code and context.

发布评论

评论列表(0)

  1. 暂无评论