使用正则表达式验证int值

时间:2015-11-28 16:24:01

标签: regex

我想验证输入只允许最大值:2,147,483,647。但它根本没有验证。正则表达式有什么问题。

<input
    pattern="^(([1-9][0-9]{1,9})|([2][0-1][0-4][0-7][0-4][0-8][0-3][0-6][0-4][0-8]{10}))$" 
    required type="number" class="form-control" />

1 个答案:

答案 0 :(得分:0)

我认为正则表达式对于您所寻求的东西来说可能是一个糟糕的解决方案选择。也就是说,下面是我认为你正在寻求做的正确的正则表达式:

^(0*(
    [1-9][0-9]{1,9})|
   ([1-2][0-1][0-4][0-7][0-4][0-8][0-3][0-6]4[0-8])|
   ([1-2][0-1][0-4][0-7][0-4][0-8][0-3]6[0-4][0-8])|
   ([1-2][0-1][0-4][0-7][0-4][0-8]3[0-6][0-4][0-8])|
   ([1-2][0-1][0-4][0-7][0-4]8[0-3][0-6][0-4][0-8])|
   ([1-2][0-1][0-4][0-7]4[0-8][0-3][0-6][0-4][0-8])|
   ([1-2][0-1][0-4]7[0-4][0-8][0-3][0-6][0-4][0-8])|
   ([1-2][0-1]4[0-7][0-4][0-8][0-3][0-6][0-4][0-8])|
   ([1-2]1[0-4][0-7][0-4][0-8][0-3][0-6][0-4][0-8])|
   (2[0-1][0-4][0-7][0-4][0-8][0-3][0-6][0-4][0-8])|
   ([1-2][0-1][0-4][0-7][0-4][0-8][0-3][0-6][0-3][0-9])|
   ([1-2][0-1][0-4][0-7][0-4][0-8][0-3][0-5][0-9]{2})|
   ([1-2][0-1][0-4][0-7][0-4][0-8][0-2][0-9]{3})|
   ([1-2][0-1][0-4][0-7][0-4][0-7][0-9]{4})|
   ([1-2][0-1][0-4][0-7][0-3][0-9]{5})|
   ([1-2][0-1][0-4][0-6][0-9]{6})|
   ([1-2][0-1][0-3][0-9]{7})|
   ([1-2]0[0-9]{8})|
   (1[0-9]{9})
)$

空白和换行只是为了清晰起见而不是正则表达式的一部分。虽然我认为它是正确的,但我不能保证它的正确性。你可以在像Regex 101这样的地方试试这个。

正如您所看到的,这很复杂,应该由程序而不是人类生成。

答案的丑陋暗示这是一个糟糕的解决方案选择。