【问题标题】:Are there any cons to having multiple regex validation expression to validate a string?使用多个正则表达式验证表达式来验证字符串有什么缺点吗?
【发布时间】:2018-01-31 11:12:28
【问题描述】:

我正在尝试创建一个完整的验证表达式来验证人们使用多行文本框发送给我的矩阵。为了满足这一点,我必须补偿以允许由不同软件生成的不同格式和语言类型的矩阵。我可以验证不同语言的唯一方法是将每种语言的验证与^...$ | ^...$ | ^...$ | 等分开使用...

这些验证表达式中的每一个都非常复杂且冗长。这样做有什么弊端吗?我主要关心的是当用户提交他们的矩阵时,我的多重验证是否会影响我的网站的性能和速度。

谁能确认对大字符串数据使用复杂、冗长的多重验证表达式是否存在缺陷或缺点?

【问题讨论】:

  • 我创建了一个答案,但我会详细说明性能问题。请稍等。

标签: asp.net regex validation webforms expression


【解决方案1】:

效率不高

您描述正则表达式的方式听起来非常昂贵。如果正则表达式没有找到匹配项,它将转到下一个 or 语句。并从字符串的开头重新开始。对于大字符串来说,这可能会对性能造成很大影响。如果您的表达式使用任何*+ 表示法,那么它就有catastrophic backtracking 的风险。这种影响将乘以在找到匹配之前必须经过的许多“或”语句。想象一下,如果它从未找到匹配项。那么你可怜的用户最终会等待很长时间,只是为了得到一个无效的通知。

错误处理

想想一旦失败,你会给用户什么样的反馈。目前,您可以给他们的唯一反馈是“验证失败”。用户会想知道可能认为格式错误,当所有现实中您不支持该语言时。这可能会让用户感到困惑。此外,如上所述,根据矩阵的大小,您的用户可能会等待很长时间才能获得响应。因此,您要确保响应尽可能具有建设性。

替代解决方案

指示您的用户声明他们使用的语言。这可以通过单选框或类似的东西来完成。如果您只想使用文本框,请指示用户在第一行写下他们的语言。然后指示他们在第二行开始矩阵。

这样您就可以快速检查该语言是否受支持。如果没有,向用户吐出一个错误。如果是,那么您将确切知道要在矩阵上运行什么正则表达式。由于您只需要运行 1 个正则表达式,因此不会对性能造成太大影响。

【讨论】:

  • @shockwave123 这是一个很好的解释!我很高兴我提出这个问题并提到这些矩阵可能非常大!因此,如果我创建一个列出每种语言的简单单选框,我将不得不根据他们选择的收音机应用验证表达式。问题是我完全不知道如何编写该函数或使用什么语言来编写。你认为你可以慢慢引导我完成这个过程吗?如果您确认您能够帮助我,我会提出一个新问题? :) 再次感谢您的详细解释,现在它非常有意义!
  • 啊……我对asp.net不太熟悉,所以我不会有太多帮助。但很高兴你喜欢我的回复!希望我能帮助你更多。
  • 无论如何都有很大的帮助!再次感谢您为我解决这个问题。你会碰巧知道哪种语言可以做到这一点吗?我希望 javascript 因为这是我知道如何从 :S 合并到我的网络中的唯一语言
  • @shoackawave123 我只是对如何/在哪里编写单独的验证表达式以满足您解释的功能感到困惑。
  • 您在哪里进行验证?你已经用 javascript 做了吗?
猜你喜欢
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多