当前位置: 首页 > 知识库问答 >
问题:

Java正则表达式-字母数字,最多一个连字符、句点或下划线,七个字符长

李鹏
2023-03-14

我不熟悉Java中的正则表达式工具,尽管它们潜力巨大,但我很难完成这项任务。我想编写一个正则表达式来验证输入字符串,该字符串遵循以下语法:

  1. 小写字母和数字的任意组合
  2. 只有一个下划线、一个破折号或一个句点(没有其他特殊字符)
  3. 最小长度为5

我想到了以下解决方案:

([/./-_]{0,1}[a-z0-9]){5,}

但在某些情况下,它仍然不起作用,例如,它不匹配允许的特殊字符之一位于中间的字符串(例如he llo)。我哪里出错了?就我而言,还有比这更好的模式吗?

共有3个答案

徐柏
2023-03-14

你可以在一个正则表达式中完成这一切:

^                        # start string
(?=[^-_.]*[-_.][^-_.]*$) # lookahead fulfilling condition 2
([-_.\w]{5,})            # all allowed characters at least 5
$                        # end of string

请参阅regex101.com上的演示,注意在Java中需要使用双反斜杠,这样表达式就变成:

^(?=[^-_.]*[-_.][^-_.]*$)([-_.\\w]{5,})$
谯皓君
2023-03-14

不要用正则表达式。由于事物可以以任何顺序出现,因此没有以下情况会更容易:

if (str.length() < 5) {
  return false;
}
int specialCharacterCount = 0;
for (int i = 0; i < str.length(); ++i) {
  char c = str.charAt(i);
  if (Character.isLowerCase(c)) {
    // A lowercase letter.
  } else if (Character.isDigit(c)) {
    // A number.
  } else if ("_.-".indexOf(c) >= 0) {
    // An allowed special character.
    ++specialCharacterCount;
  } else {
    // Some other character - immediately invalid.
    return false;
  }
}
// Return true if there is at most one of _, . and -.
return specialCharacterCount <= 1;
宇文德明
2023-03-14

这个怎么样?您可以使用“向前看”来验证至少有5个字符。

^(?=.{5})[a-z0-9]*([-_.][a-z0-9]*)?$
 类似资料:
  • 我希望有一个正则表达式来检查字符串是否包含大小写字母、数字、下划线以及字符限制。这些是字符串中唯一允许的类型。

  • 我试图匹配包含字母数字、连字符、下划线和空格的字符串。 连字符、下划线、空格和数字是可选的,但第一个和最后一个字符必须是字母。 例如,这些都应该匹配: 我试过这个: 但它在开始/结束时与空格、下划线或连字符匹配,但它应该只允许在两者之间。

  • 我需要使用通配符类型搜索筛选一组字符串,如下所示: 寻找应该匹配你好,但不是Helo 查找应该匹配"pant"和"想要"但不匹配"ant" 寻找应该匹配"吉普赛人"和"典型" 代表一个或多个字符。我不介意手写或基于正则表达式的搜索。有什么想法吗?典型的。NET方法的通配符匹配0或更多,但我需要1个或更多字符。我该怎么做?

  • 其中,我需要包括连字符和空格。 这意味着还必须可以输入值“”。

  • 我的输入字段的密码验证要求如下:“密码应至少包含一个大写字母、一个小写字母、一个数字或特殊字符”。 这是1个大写、1个小写、1个数字和一个特殊字符的正则表达式

  • 我有一组由连字符分隔的ID,其中至少可以有6个字符,包含字母数字值和一些特殊字符,在末尾,只有数字值是不允许的。如下所示: 我正在尝试下面给出的具有以下规则的以下模式,但面临一些测试查询的困难... https://regex101.com/r/d8MFRE/5