我想要一个正则表达式
我试过了:
^(?=.{8,})[a-zA-Z0-9^]([-_.][a-zA-Z0-9]*)?[a-zA-Z0-9^]$
不起作用,即它与kjh.jhhhmnbmnb
答案 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");
}