正则表达式与if语句用于验证数字范围的区别

3
我必须验证一个数字是否在范围(0-255)内。我可以使用正则表达式或if语句来实现。
正则表达式:
\b([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b

或者

If(number>-1 && number <=255)

我想知道哪种方法更好用来验证数字范围。

只需使用if语句,无需导入正则表达式库。 - Amen Jlili
你为什么使用 > -1 而不是 >= 0 - Dioxin
所有的输入都非常有用,感谢大家的贡献。我会采用简单的“if”语句。 - MIM
5个回答

4
我有一个简单的规则:
如果你能够编写不需要正则表达式且简单易懂的代码 - 那么就不用使用它。
正则表达式提供了很多强大的功能,但是它可能会很棘手难以掌握。
在你的情况下 - “if” 代码将运行更快,并且可读性更好。
很多时候 - 正则表达式可能会变得非常复杂,难以理解和维护,尤其当需求发生变化时。

因为没有提到效率而点赞。我发誓,正则表达式问题会吸引比卡戴珊更多的狗仔队员那样的过早优化者! - Alan Moore

3
您可能会使用String.matches()进行匹配/检查。但这是非常低效的。它会在内部编译模式,并使用同步等等...
因此,总之,尽可能避免使用正则表达式(此外,您必须将数字转换为字符串,然后使用正则表达式。这浪费了空间时间)。
PS:还要注意,跨平台处理数学运算时始终更加高效。

这是我认为的,但为了确保起见,你有关于这个的任何证据吗(官方的js网络文档或其他任何东西)? - LuckyLuke Skywalker

1
数字比较要比使用正则表达式比较字符串更有效。将数字作为字符串进行比较会使问题变得过于复杂化。

1

当使用以下数据时,您的正则表达式将获得部分匹配:

-123 +12 !12.

因此最好使用“字符串比较”来避免未知问题并保持复杂的正则表达式。请参见演示。

https://regex101.com/r/mS3tQ7/11


1
为了简单易懂(针对你的问题),我建议使用if语句。但是对于复杂的验证,我建议使用正则表达式。原因也是相同的——保持简单易懂。为什么要使用8-10行if-then块,当你可以用简洁的25-30个字符的正则表达式模式进行相同的验证呢!如果将相同的模式放入.config文件中,您现在可以在不重新编译的情况下更改应用程序的行为。这是少量代码以灵活的方式完成更多工作。

有趣的是,8到10个if块几乎总是比30个字符的正则表达式更有效率 :P - TheLostMind
但是当您使用正则表达式时,它看起来更加简洁。 - Leo
正则表达式的创建非常昂贵。不仅如此,在matcher中添加额外的同步开销,还会丧失不使用像int这样的原始类型的优势。 - TheLostMind
这是正确的,但它取决于开发人员的视角,是否以及何时使用它 :) - Leo
非常取决于您所重视的内容和您的软件应该有多高的效率。 - LuckyLuke Skywalker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接