사용자 이름을 검증하는 정규 표현

다음 기준에 따라 사용자 이름을 검증하기 위한 정규 표현을 작성하려고 합니다.

  1. 밑줄과 도트 등 영숫자사용할 수 있습니다.
  2. 사용자 이름의 끝이나 시작에는 밑줄과 도트를 사용할 수 없습니다(예:_username/username_/.username/username.).
  3. 밑줄과 도트는 에 둘 수 없습니다(예:user_.name).
  4. 언더스코어 또는 도트는 연속해서 여러 번 사용할 수 없습니다(예:user__name/user..name).
  5. 글자 수는 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");
}
} }