当前位置: 首页 > 面试题库 >

如何检查字符串中是否包含小写字母,大写字母,特殊字符和数字?

于飞飙
2023-03-14
问题内容

我一直在谷歌搜索很多,但没有找到我的问题的答案:

如何使用正则表达式检查字符串是否至少包含以下各项之一:

  • 大写字母
  • 小写字母
  • 数字
  • 特殊字符: ~!@#$%^&*()-_=+|[{]};:’“,<.>/?`

所以,我至少需要一个大写字母 至少一个小写字母 至少一个数字 至少一个特殊字符。

我敢肯定答案很简单,但是我找不到。任何帮助是极大的赞赏。


问题答案:

尽管我个人会使用Mark
Rhodes提供的解决方案,但这样做可以实现Java中作为单个正则表达式所需的功能。随着规则变得更加复杂,这将变得非常荒谬(如果还没有…)。

String regex = "^(?=.*?\\p{Lu})(?=.*?[\\p{L}&&[^\\p{Lu}]])(?=.*?\\d)" + 
               "(?=.*?[`~!@#$%^&*()\\-_=+\\\\\\|\\[{\\]};:'\",<.>/?]).*$"
  1. ^这匹配字符串的开头。并非一定要做到这一点,但我发现它有助于提高可读性和理解力。此外,在可能的情况下使用它通常可以大大提高性能,并且几乎永远不会受到损失。

  2. (?= X )这称为正向超前。基本上就是我们说的是“字符串(^)的开始必须跟这件事 X 为了一场比赛,但 不要 使光标移动到结束 X ,留在该行的开头。(这就是“展望未来”部分。)

  3. 。*?\ p {Lu}在行的开头吃掉字符,直到找到大写字母为止。如果找不到大写字母,将无法匹配。我们使用\ p {Lu}而不是AZ是因为我们不希望世界其他地区的人举起手来抱怨我们的软件是由一个无知的美国人编写的。

  4. 现在,我们回到该行的开头(之所以返回,是因为我们使用了超前功能),并开始搜索。*?[\ p {L} && [^ \ p {Lu}]]速记,表示“所有字母,减去大写字母”(因此匹配小写字母)。

  5. ?\ d +。?[`〜!@#$%^&*()\ -_ = + \\\ | \ [{\\}};:’\“,<。> /?]重复用于数字和特殊字符列表。

  6. 。* $匹配所有其他内容,直到该行的末尾。我们这样做只是因为Java中“ matches”方法的语义,该方法查看 整个 字符串是否与正则表达式匹配。您可以离开这一部分,并使用Matcher#find()方法获得相同的结果。

  7. 猫头鹰是有关任何技术主题的最佳书籍之一。 而且读起来又短又快。我不能推荐它。



 类似资料:
  • 问题内容: 我知道我可以使用一系列遍历字符串的for循环来做到这一点,但这将是糟糕的编程。好吧,我的教授更喜欢我不这样做。我想使用正则表达式来做到这一点。 问题答案: 对于简单的字符串检查,一次扫过字符串就足够了。由于Regex不会提供任何明显的好处,因此这里有一个简单的for循环可实现相同的目的: 测试运行: 我认为这应该有助于OP的特定问题。

  • 所以我一辈子也想不出来。我正在尝试编写一个程序,提示用户输入电话号码。这将作为字符串输入,并在稍后的程序中转换为整数数组。然而,我现在遇到的情况是验证用户输入的字符串是否仅限于!!!包含2-9之间的数字。我已经尝试了。Contains方法和。Match方法,但是使用这些方法总是提供错误的结果。如果有人能提供一些关于如何解决这个问题,我将非常感谢。提前感谢。 以下是我目前掌握的信息:

  • 朋友们,可以在一个正则表达式中验证特殊字符的最小值、大写字母的最小值和数字的最小值吗? 字符串示例: 我想要的是: 我想要一个正则表达式来验证至少2个特殊字符、2个数字和2个大写字母

  • 问题内容: 我想创建一个函数来检查字符串的首字母是否大写。到目前为止,这是我想出的: 当我尝试运行它时,出现此错误: 有人可以看看并告知我在做什么错吗? 问题答案: 为什么不使用;

  • 大家好,我正在努力找出如何检查“我的edittext”值是否包含字母和数字,如果用户输入例如“JDF23D”告诉他们删除数字,我会显示一个snackbar,但我的错误是不管它保留在那里,否则你会建议什么?

  • null 我对解析和的最佳猜测如下。此regex似乎将所有输入计算为: