다음 기준에 따라 사용자 이름을 검증하기 위한 정규 표현을 작성하려고 합니다.
- 밑줄과 도트 등 영숫자만 사용할 수 있습니다.
- 사용자 이름의 끝이나 시작에는 밑줄과 도트를 사용할 수 없습니다(예:
_username
/username_
/.username
/username.
). - 밑줄과 도트는 옆에 둘 수 없습니다(예:
user_.name
). - 언더스코어 또는 도트는 연속해서 여러 번 사용할 수 없습니다(예:
user__name
/user..name
). - 글자 수는 8~20자 사이여야 합니다.
이것이 내가 지금까지 해 온 것이다; 다섯 번째 규칙을 제외한 모든 기준 규칙을 적용하는 것처럼 들린다.여기에 다섯 번째 규칙을 추가하는 방법을 모릅니다.
^[a-zA-Z0-9]+([._]?[a-zA-Z0-9]+)*$
질문에 대한 답변
^(?=.{8,20}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$
└─────┬────┘└───┬──┘└─────┬─────┘└─────┬─────┘ └───┬───┘
│
│
│
│
no _ or . at the end
│
│
│
│
│
│
│
allowed characters
│
│
│
│
│
no __ or _. or ._ or .. inside
│
│
│
no _ or . at the beginning
│
username is 8-20 characters long
브라우저가 네거티브한 룩백지원을 하지 않아 오류가 발생할 경우 다음 대체 패턴을 사용하십시오.
^(?=[a-zA-Z0-9._]{8,20}$)(?!.*[_.]{2})[^_.].*[^_.]$
여기서 Lookahead 표현을 써야 할 것 같아요.http://www.regular-expressions.info/lookaround.html
해라
^[a-zA-Z0-9](_(?!(. _)) .(?!(_ .)) [a-zA-Z0-9]){6,18}[a-zA-Z0-9]$
[a-zA-Z0-9]
영숫자 THEN (
_(?!.)
a_ 뒤에 .OR이 붙지 않는다.
.(?!_)
a. 뒤에 _OR이 붙지 않는다.
[a-zA-Z0-9]
영숫자) FOR
{6,18}
최소 6회~최대 18회
[a-zA-Z0-9]
영숫자
(첫 번째 문자는 영숫자, 그리고 6 ~ 18 문자, 마지막 문자는 영숫자, 6+2=8, 18+2=20)
나는 규칙적인 표현을 좋아하지만 읽을 수 있는 것에는 한계가 있다고 생각한다.
그래서 제가 제안하고 싶은 건
new Regex("^[a-z._]+$", RegexOptions.IgnoreCase).IsMatch(username) && !username.StartsWith(".") && !username.StartsWith("_") && !username.EndsWith(".") && !username.EndsWith("_") && !username.Contains("..") && !username.Contains("__") && !username.Contains("._") && !username.Contains("_.");
좀 더 길지만 관리자가 expreso를 열 필요는 없습니다.
물론 당신은 긴 정규식을 언급할 수 있지만, 그것을 읽는 사람은 신뢰에 의존해야 한다………
필립의 답변을 약간 수정하면 최신 요구 사항이 수정됩니다.
^[a-zA-Z0-9]([._](?![._]) [a-zA-Z0-9]){6,18}[a-zA-Z0-9]$
private static final Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
int n = Integer.parseInt(scan.nextLine());
while (n-- != 0) {
String userName = scan.nextLine();
String regularExpression = "^[[A-Z] [a-z]][[A-Z] [a-z] \d [_]]{7,29}$";
if (userName.matches(regularExpression)) {
System.out.println("Valid");
} else {
System.out.println("Invalid");
}
} }