黑客排名java字符串正则表达式用户名

时间:2016-05-06 19:32:06

标签: java regex

问题是根据这些规则识别一系列字符串中的有效用户名。

1.用户名可以包含字母数字字符和/或下划线(_)。

2.用户名必须以字母字符开头。

  1. 8≤|用户名| ≤30。
  2. 输入和输出已经为我处理,他们只想要正则表达式。

    我有“^ [a-zA-Z] [a-zA-Z0-9 _] + $ {8,30}”

    我相信在字符串的开头有一个字母字符,后跟字母数字和下划线字符到字符串的末尾,最少8个字符,最多30个。这个正则表达式适用于5个字符串8例。它不起作用的大多数情况都很长,我不会在这里张贴它们,但有一种情况它不起作用,简单而复杂。

    “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab”

    我的正则表达式说它是有效的,根据规则,我认为它应该是有效的。答案说这是无效的。根据我上面提到的规则,我错过了为什么这应该是无效的?

2 个答案:

答案 0 :(得分:4)

正确的正则表达式是

^[a-zA-Z][a-zA-Z0-9_]{7,29}$

请参阅显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab未通过测试的regex demo

当您使用${8,30}时,表示匹配字符串的结尾8到30次

我的模式匹配第一个字母字符,然后是7到29个字母,数字和下划线(总共8到30个)。

请注意,您可以将其写为

^[a-zA-Z]\w{7,29}$

注意:在Java中,在将模式声明为Java C字符串时,必须加倍反斜杠。此外,如果您使用^,则不需要$.matches()

Boolean matched = input.matches("[a-zA-Z]\\w{7,29}");

答案 1 :(得分:1)

此表达式传递所有测试用例

String pattern ="^[a-zA-Z][a-zA-Z0-9_]{7,29}$";