웹 사이트 확인을 위해 이름과 성 확인이 필요합니다.
이름의 경우 문자 만 포함해야하며 공백이있는 여러 단어 일 수 있으며 최소 3 자이지만 최대 30 자까지 가능합니다. 빈 문자열은 유효성을 검사하지 않아야합니다 (예 : Jason , jason , jason smith , jason smith , JASON , Jason smith , jason Smith , jason SMITH ).
성의 경우 3 자 이상 30 자 이하의 문자로만 된 단일 단어 여야합니다. 빈 문자열은 유효성을 검사하지 않아야합니다 (예 : lazslo , Lazslo 및 LAZSLO ).
답변
다음과 같은 이름을 잊지 마세요.
- 마티아스 다 라스
- 마틴 루터 킹 주니어
- 헥터 소시지-하우젠
이것은 대부분의 경우에 트릭을 수행합니다.
/^[a-z ,.'-]+$/i
또는 매우 달콤한 유니 코드로 국제 이름 지원 :
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u
답변
이름과 성의 형식에 대해 잘못된 가정을합니다. 이름이 비어 있는지 확인하는 것 외에는 이름을 전혀 확인하지 않는 것이 좋습니다.
답변
이 모든 답변을 살펴본 후 대부분의 언어를 지원하고 단어 문자 만 허용하는 작은 정규식을 빌드하는 방법을 찾았습니다. 하이픈, 공백 및 아포스트로피와 같은 일부 특수 문자도 지원합니다. 나는 파이썬에서 테스트했으며 아래 문자를 지원합니다.
^[\w'\-,.][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
지원되는 문자 :
abcdefghijklmnopqrstwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
áéíóúäëïöüÄ'
陳大文
łŁőŐűŰZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųū
ÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁ
ŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ.-
ñÑâê都道府県Федерации
আবাসযোগ্য জমির걸쳐 있는
답변
이름을 처리하기 위해 사용자 지정 정규식을 만들었습니다.
나는 이러한 유형의 이름을 시도하고 완벽하게 작동하는 것을 발견
- 존 스미스
- 존 D’ Largy
- John Doe-Smith
- John Doe Smith
- 헥터 소시지-하우젠
- 마티아스 다 라스
- 마틴 루터 킹
- 아이 웡
- 차오 창
- 알츠 베타 바라
내 RegEx는 다음과 같습니다.
^([a-zA-Z]{2,}\s[a-zA-Z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)
MVC4 모델 :
[RegularExpression("^([a-zA-Z]{2,}\\s[a-zA-Z]{1,}'?-?[a-zA-Z]{2,}\\s?([a-zA-Z]{1,})?)", ErrorMessage = "Valid Charactors include (A-Z) (a-z) (' space -)") ]
\\
이스케이프 문자의 경우 이중 을 참고하십시오.
RegEx를 처음 사용하는 분들을 위해 설명을 포함하겠습니다.
^ // start of line
[a-zA-Z]{2,} // will except a name with at least two characters
\s // will look for white space between name and surname
[a-zA-Z]{1,} // needs at least 1 Character
\'?-? // possibility of **'** or **-** for double barreled and hyphenated surnames
[a-zA-Z]{2,} // will except a name with at least two characters
\s? // possibility of another whitespace
([a-zA-Z]{1,})? // possibility of a second surname
답변
나는 그것을 검색하고, 검색하고, 연주하고, 놀았으며, 완벽하지는 않지만 다른 사람들이 하나의 변수로 제공된 성과 이름을 확인하려고 시도하는 데 도움이 될 수 있습니다.
제 경우에는 그 변수가 $ name입니다.
내 PHP에 다음 코드를 사용했습니다.
if (preg_match('/\b([A-Z]{1}[a-z]{1,30}[- ]{0,1}|[A-Z]{1}[- \']{1}[A-Z]{0,1}
[a-z]{1,30}[- ]{0,1}|[a-z]{1,2}[ -\']{1}[A-Z]{1}[a-z]{1,30}){2,5}/', $name)
# there is no space line break between in the above "if statement", any that
# you notice or perceive are only there for formatting purposes.
#
# pass - successful match - do something
} else {
# fail - unsuccessful match - do something
RegEx를 직접 배우고 있지만 RegEx 친구가 제공 한 코드에 대한 설명이 있습니다.
여기있어:
단어 경계«\ b»에서 위치 지정
아래 정규 표현식을 일치시키고 일치하는 항목을 역 참조 번호 1로 캡처
«([AZ] {1} [az] {1,30} [-] {0,1} | [AZ] {1} [-\ ‘] { 1} [AZ] {0,1} [az] {1,30} [-] {0,1} | [az] {1,2} [-\ ‘] {1} [AZ] {1} [ az] {1,30}) {2,5}»
2 ~ 5 회, 최대한 많이, 필요한만큼 돌려주기 (욕심)«{2,5}»
* 이 노트의 예의를 이해하는 데 도움이 필요합니다 *
참고 : 캡처 그룹 자체를 반복했습니다. 그룹은 마지막 반복 만 캡처합니다. 반복 된 그룹 주위에 캡처 그룹을 배치하여 모든 반복을 캡처합니다. «{2,5}»
아래 정규식 중 하나와 일치 (실패한 경우에만 다음 대체 시도)«[AZ] {1} [az] {1,30} [-] {0,1}»
“A”와 “Z”«[AZ] {1}»범위의 단일 문자와 일치
정확히 1 회«{1}»
“a”와 “z”사이의 범위에서 단일 문자 일치«[az] {1,30}»
1 ~ 30 회, 가능한 한 많이, 필요에 따라 환원 (욕심)«{1,30}»
목록“-”«[-] {0,1}»에있는 단일 문자와 일치
0 ~ 1 회, 가능한 한 많이, 필요한만큼 돌려주기 (욕심)«{0,1}»
또는 아래의 정규식 2 번과 일치 (실패한 경우에만 다음 대안 시도)«[AZ] {1} [-\ ‘] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1}»
“A”와 “Z”«[AZ] {1}»범위의 단일 문자와 일치
정확히 1 회«{1}»
아래 목록에있는 단일 문자 일치«[-\ ‘] {1}»
정확히 1 회«{1}»
문자 “-“«-»A ‘문자«\’»중 하나
“A”와“Z”«[AZ] {0,1}»사이의 범위에서 단일 문자를 찾습니다.
0 ~ 1 회, 가능한 한 많이, 필요한만큼 돌려주기 (욕심)«{0,1}»
“a”와 “z”사이의 범위에서 단일 문자 일치«[az] {1,30}»
1 ~ 30 회, 가능한 한 많이, 필요에 따라 환원 (욕심)«{1,30}»
목록“-”«[-] {0,1}»에있는 단일 문자와 일치
0 ~ 1 회, 가능한 한 많이, 필요한만큼 돌려주기 (욕심)«{0,1}»
또는 아래 정규식 번호 3과 일치합니다 (일치하지 못하면 전체 그룹이 실패 함)«[az] {1,2} [-\ ‘] {1} [AZ] {1} [az] {1,30} »
“a”와 “z”사이의 범위에서 단일 문자 일치«[az] {1,2}»
1 ~ 2 회, 최대한 많이, 필요에 따라 환원 (욕심)«{1,2}»
“”및“ ‘”«[-\’] {1}»범위의 단일 문자와 일치
정확히 1 회«{1}»
“A”와 “Z”«[AZ] {1}»범위의 단일 문자와 일치
정확히 1 회«{1}»
“a”와 “z”사이의 범위에서 단일 문자 일치«[az] {1,30}»
1 ~ 30 회, 가능한 한 많이, 필요에 따라 환원 (욕심)«{1,30}»
이 검증은 양식을 작성하는 모든 사람이 서양식 이름을 가지고 있으며 전 세계에서 대다수의 사람들을 제거 할 수 있다고 전적으로 가정합니다. 그러나 이것이 올바른 방향으로 나아가는 단계라고 생각합니다. 아마도이 정규식은 전문가가 단순하게 다루기에는 너무 기본적이거나 내 검색에서 위의 코드를 찾을 수없는 다른 이유가있을 수 있습니다. 나는이 부분을 알아 내기 위해 너무 오랜 시간을 보냈다. 아래의 내 테스트 이름을 보면 내 마음이이 모든 것에 얼마나 흐릿한 지 알 수있을 것이다.
다음 이름에 대한 코드를 테스트했으며 결과는 각 이름의 오른쪽에 괄호 안에 있습니다.
- STEVE SMITH (실패)
- Stev3 Smith (실패)
- STeve Smith (실패)
- Steve SMith (실패)
- Steve Sm1th (Steve Sm에 전달됨)
- d’ Are to Beaware (Are to Beaware에서 전달됨)
- 조 블로우 (통과)
- 우형 경 (통과)
- Mike O’Neal (통과)
- Steve Johnson-Smith (통과)
- Jozef-Schmozev Hiemdel (통과)
- O Henry Smith (통과)
- Mathais d’ Arras (통과)
- 마틴 루터 킹 주니어 (통과)
- 다운타운 제임스 브라운 (통과)
- Darren McCarty (통과)
- George De FunkMaster (통과)
- Kurtis B-Ball 농구 (통과)
- Ahmad el Jeffe (통과)
기본 이름이있는 경우 위의 코드가 작동하려면 1 ~ 5 개 이상이어야합니다. 테스트 중에 사용한 것과 비슷합니다.이 코드가 적합 할 수 있습니다.
개선 사항이 있으면 알려주십시오. 저는 초기 단계에 있습니다 (RegEx를 파악한 후 처음 몇 달.
감사합니다. 행운을 빕니다, 스티브
답변
이름은
"([a-zA-Z]{3,30}\s*)+"
전체 이름 부분이 30 자 미만이어야한다면 별도로 확인해야한다고 생각합니다. 표현 ".{3,30}"
은 그렇게해야합니다.
성 요구 사항은 다음과 같이 번역됩니다.
"[a-zA-Z]{3,30}"
하지만 이것들을 확인해야합니다. 공백이 포함 된 성이 많이 있습니다.
답변
maček이 말했듯이 :
다음과 같은 이름을 잊지 마세요.
마티아스 다 라스
마틴 루터 킹 주니어
헥터 소시지-하우젠
다음과 같은 경우를 제거합니다.
.. 마티아스
마틴 킹 주니어-
여기에는 더 많은 경우가 포함됩니다.
^([a-z]+[,.]?[ ]?|[a-z]+['-]?)+$
