나는 그것을 검색하고, 검색하고, 연주하고, 놀았으며, 완벽하지는 않지만 다른 사람들이 하나의 변수로 제공된 성과 이름을 확인하려고 시도하는 데 도움이 될 수 있습니다.
제 경우에는 그 변수가 $ 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를 파악한 후 처음 몇 달.
감사합니다. 행운을 빕니다, 스티브