【问题标题】:RegEx Vs If statement to validate number rangeRegEx Vs If 语句验证数字范围
【发布时间】:2015-02-19 06:21:55
【问题描述】:

我必须验证一个数字是否在 (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)

我想知道用哪一个来验证数字范围更好。

想法!

【问题讨论】:

  • 如果不需要导入正则表达式库,只需做一个。
  • 你为什么用&gt; -1而不是&gt;= 0
  • 所有输入都非常有用,感谢大家的输入。我将使用简单的“if”语句。

标签: java regex


【解决方案1】:

我使用一个简单的规则:
如果您可以在没有正则表达式的情况下进行编码并保持简单 - 那就不要这样做。
正则表达式为您提供了强大的功能,但要掌握它可能会很棘手。
在您的情况下 - “if”代码将运行得更快并且具有更好的可读性。
很多时候 - 正则表达式可能会随着需求的变化而变得非常难以理解和维护。

【讨论】:

  • 因为没有提到效率而被赞成。我发誓,正则表达式问题吸引的过早优化者比卡戴珊吸引狗仔队更糟糕!
【解决方案2】:

您可能会使用String.matches() 进行匹配/检查。这是非常低效。它在内部编译模式,使用同步等等等等。

因此,最重要的是,尽可能避免使用正则表达式(另外,您必须将数字转换为字符串,然后使用正则表达式。真是浪费 spacetime em>)

PS : 另请注意,数学运算 总是能更有效地跨平台处理。

【讨论】:

    【解决方案3】:

    数字比较比使用正则表达式比较的字符串更有效。通过比较数字作为字符串过于复杂。

    【讨论】:

      【解决方案4】:

      与以下数据一起使用时,您的正则表达式将为您提供部分匹配:

      -123 +12 !12.

      因此最好使用string comparison 来避免看不见的问题并维护复杂的正则表达式。请参阅演示。

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 有趣的部分是 8 到 10 如果块几乎总是比正则表达式的 30 个字符更有效:P
        • 是的,但是当你使用正则表达式时它看起来很简洁。
        • 正则表达式的创建非常昂贵。不要在matcher 中添加额外的同步开销,以及不使用原始类型(如int)的优势。跨度>
        • 确实如此,但这取决于开发人员是否或何时使用它:)
        猜你喜欢
        • 1970-01-01
        • 2012-06-09
        • 2016-08-17
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多