gpt4 book ai didi

java - Java 中用户名的正则表达式 (RegEx)

转载 作者:行者123 更新时间:2023-11-29 05:23:13 26 4
gpt4 key购买 nike

如何在Java中形成用户名字符串的RegEx?

练习规则:

  1. 仅 3 - 10 个字符。
  2. 仅“a”-“z”、“A”-“Z”、“1”-“9”、“_”和“.”是允许的。
  3. '_' 和 '.'只能出现0到2次。
  • "abc_._" = false
  • "abc..." = false
  • "abc__" = true
  • “abc..” = true
  • "abc_." = true

如果我不使用正则表达式,它会更容易。


在不考虑'1'-'9'的情况下,我尝试了以下 RegEx,但它们不可行。

String username_regex = "[a-zA-Z||[_||.]{0,2}]{3,10}";
String username_regex = "[a-zA-Z]{3,10}||[_||.]{0,2}";

我的功能:

public static boolean isUserNameCorrect(String user_name) {
String username_regex = "[a-zA-Z||[_]{0,2}]{3,10}";
boolean isMatch = user_name.matches(username_regex);
return isMatch;
}

我应该使用什么 RegEx?

最佳答案

如果我在 CS 类(class)中记得很清楚,不可能创建一个单一的正则表达式来满足所有三个要求。所以,我会对每个条件进行单独检查。例如,此正则表达式检查条件 1 和 2,并单独检查条件 3。

private static final Pattern usernameRegex = Pattern.compile("[a-zA-Z1-9._]{3,10}");

public static boolean isUserNameCorrect(String userName) {
boolean isMatch = usernameRegex.matcher(userName).matches();
return isMatch && countChar(userName, '.')<=2 && countChar(userName, '_') <=2;
}

public static int countChar(String s, char c) {
int count = 0;
int index = s.indexOf(c, 0);
while ( index >= 0 ) {
count++;
index = s.indexOf(c, index+1);
}
return count;
}

顺便说一句,请注意允许您在 Java 中重用正则表达式的模式(性能增益,因为编译正则表达式的成本很高)。

正则表达式不能做你想做的事情的原因(如果我没记错的话)是因为这个问题需要一个上下文无关的语法,而正则表达式是一个常规语法。 Ream more

关于java - Java 中用户名的正则表达式 (RegEx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23824930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com