【问题标题】:Regexp for validation in JavaJava 中用于验证的正则表达式
【发布时间】:2017-01-09 21:36:57
【问题描述】:

我正在尝试为要使用的密码验证编写一个正则表达式,但我不知道如何正确执行。 到目前为止,我的 RegEx 看起来像:

regexp = "^(?=.*[0-9]){1,3}(?=.*[a-zA-Z]){1,3}(?=\\s+$)$"

关于密码规​​则:

A) 必须包含数字、大小写字母。

B) 一行中的字母或数字的个数必须小于 4。(例如 1234 和 dcba 都不允许)

C) 相同字符的数量不超过 3 个。(例如,aaaa 和 0000 都不允许)
谢谢。

【问题讨论】:

  • 问题是什么?如果问题是正则表达式如何:我认为不可能用单个正则表达式检查它
  • 我认为可以使用单个正则表达式来完成。但出路是什么?
  • A) 不,因为顺序不固定(是吗?),对于 B):您必须写下所有可能性
  • 你应该检查所有额外的东西(例如在方法中),如果它是正确的,如果你结合了所有你得到你的有效性 |即使有可能正则表达式会很长且不可读
  • 因为你问的答案超出了:C):将其拆分为字符并计算它们更容易 |正则表达式不能计数(除非您有固定的字母顺序 - 请参阅上面的评论)

标签: java regex validation


【解决方案1】:

我认为不可能用一个正则表达式来检查它。
即使有可能正则表达式会很长且不可读。

这里有一些原因:

  • A) 不,因为订单不固定(是吗?)
  • B) 你必须写下所有的可能性(见 A)
  • C) 正则表达式无法计数 (参见 A)

你应该检查所有额外的东西(例如方法),如果它是正确的,如果你结合了所有你得到的有效性。

以 C 为例:拆分为字符并计算它们。
性能改进的提示:如果您检查一个并且它是错误的 - 不要检查其他的(也在方法本身中)。


一般而言正则表达式是一个表达式,用于检查字符串是否以正确的顺序包含正确的字符

所以你可以检查它是否是一个有效的 http(s) 请求,因为顺序是固定的,只有域发生了变化。但(简单)基本是:http + 可选 s + // + 最少 3 个字符(具体一个)+ . + 最少 3 个字符(具体一个)。
Here are some other good examples.

【讨论】:

    【解决方案2】:

    我不相信这可以只用一个正则表达式来完成。而是提出一种算法来扫描字符串(密码)并验证您对所述密码的要求。

    【讨论】:

    • 从技术上讲它可以,但它会是一个巨大且非常低效的算法,尤其是在涉及最大数值时......底线是它真的不切实际:) P.S.好名字!
    • 好的,我同意你的看法。但是检查字符串中有多少相同字符的正则表达式是什么(我的意思是我的问题中的“C”部分)。我想为每个点(“A”、“B”、“C”)编写三个单独的正则表达式。这是个好主意吗?谢谢。
    猜你喜欢
    • 2023-03-12
    • 2011-04-17
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多