正则表达式:所有字母数字,中间至多有一个点

时间:2017-05-16 02:34:05

标签: java regex

我想要一个正则表达式

  1. 包含字母数字字符,最多包含一个点
  2. 仅以字母字符
  3. 开头
  4. 没有以点
  5. 结束

    我试过了:

     ^(?=.{8,})[a-zA-Z0-9^]([-_.][a-zA-Z0-9]*)?[a-zA-Z0-9^]$
    

    不起作用,即它与kjh.jhhhmnbmnb

    不匹配

3 个答案:

答案 0 :(得分:3)

试试这个:

^[A-Za-z][A-Za-z0-9]*(\.[A-Za-z0-9]+)?$

这可能更简洁,但它首先需要一个字母,然后是任意数量的字母数字字符。之后,(可选)有一个句号后跟更多的字母数字字符。

答案 1 :(得分:2)

试试这个:

^\p{IsAlphabetic}\w*(\.\w+)?$

首先匹配字母字符,然后匹配任意数量的单词字符,然后,可选地,单个点后跟至少一个单词字符。

如果您的Java版本不支持Java Pattern class中定义的Unicode字符类,则可以使用Posix类执行此操作:

^\p{Alpha}\w*(\.\w+)?$

或者,所有其他方法都失败了,你自己的显式类:

^[a-zA-Z][a-zA-Z_0-9]*(\.[a-zA-Z_0-9]+)?$

(请注意,我已经允许_字符与Java对什么构成"字"字符(\w)的定义一致。如果不需要,请将其删除。)

答案 2 :(得分:1)

尝试以下正则表达式:

^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9])?$

<强>解释

(?!.*\\..*\\..*)   Assert that two periods do not occur
[A-Za-z]           Match an initial alpha character
(
[A-Za-z0-9.]*      Match an alphanumeric or dot zero or more times
[A-Za-z0-9]        Match a terminal alphanumeric only once
)?                 The entire quantity occurring zero or once

代码示例:

String input = "a23.d";
if (input.matches("^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9])?$")) {
    System.out.println("match");
}