正则表达式:允许最小字母数字,点和 - 字符。星号允许在任何地方使用?

时间:2017-03-01 12:18:05

标签: java regex

我的要求是:

  1. 字符串应至少包含4个字符(仅限字母数字, 点和连字符允许)。
  2. 除此之外,允许任何地方(开始,中间或结束)的星号
  3. 不应包含上述第1点和第2点中提到的任何其他字符。
  4. e.g。以下是有效的字符串:

    Ab*08
    
    *.6-*N*
    

    以下是无效字符串:

    ****AB-*
    
    GH.*
    

    我的正则表达式如下:

    ^(.*?[a-zA-Z0-9.\-]){4,}.*$
    

    我在第1点和第2点提到的基本验证是有效的。但正则表达式允许其他特殊字符,如<,>,&我怎样才能修改我的正则表达式来实现这个目标?

2 个答案:

答案 0 :(得分:5)

您可以使用

^(?:[*]*[a-zA-Z0-9.-]){4}[*a-zA-Z0-9.-]*$

它检查4个有效字符(可能被*包围)并检查您的整个字符串是否仅包含您所需的字符。

Obligatory regex 101

注意:regex101不完全支持java正则表达式语法。显示的模式是PCRE模式,但所有使用的功能也可以在java regex中使用。

注意2:如果使用.matches检查输入,则可以省略锚点,锚点已经锚定。

答案 1 :(得分:0)

^(?:\**[\w\d.-]\**){4,}$

这应该这样做。更简单一点。