컴퓨터, 프로그래밍
PHP (정규식) - 그것은 무엇인가? 예 및 확인 정규 표현식
현대의 프로그래밍 언어에서 텍스트로 작업 할 때, 개발자는 지속적으로, 원하는 패턴을 준수 입력 검증의 목적에 부합 검색 및 테스트 조각 및 문자 정보의 처리 작업의 다른 유형을 대체합니다. 시간 손실, 개발 및 현대화의 코드 호환성 및 복잡성에 이르게 자신의 검증 알고리즘을 개발한다.
인터넷과 웹 디자인 언어의 급속한 발전이 코드에 필요한 최소한의 양의 텍스트 처리의 다양한 컴팩트 수단의 생성이 필요합니다. 그것은 예외는 아니다 초보자 및 PHP 언어의 전문 개발자들 사이에서 인기가있다. 텍스트 템플릿으로 정규 표현식 언어는 텍스트를 처리하는 작업을 단순화하고 수십 수백 줄의 코드를 줄일 수 있습니다. 대부분의 문제는 전혀없이 해결 될 수 없습니다.
PHP에서 정규 표현식
«EREG»,«mb_ereg»과«레그»- PHP 언어는 정규 표현식 작업을위한 세 가지 메커니즘을 가지고있다. 가장 일반적인 인터페이스«레그», 그 기능 원래 PHP 패키지에 포함되어있는 펄 언어를 위해 개발 된 PCRE 정규 표현식 지원의 라이브러리에 대한 액세스를 제공합니다. 정규 표현식의 언어의 특정 패턴에 따라, 주어진 텍스트 문자열 매칭의 기능을 레그가 추구.
구문 기본 사항
짧은 기사의 한 부분으로는 특별한 문학이이를 위해, 전체 정규 표현식 구문을 자세히 설명하는 것은 불가능하다. 우리는 개발자를위한 기회를 표시하고 코드 예제를 이해하는 유일한 주요 요소를 제시한다.
PHP에서 정규 표현식은 공식적으로 매우 어려운 정의 때문에 설명을 단순화한다. 정규 표현식은 텍스트 문자열입니다. 그것은 전용 분리 템플릿을 처리하는 방법을 나타내는 수식 구성된다. 패턴의 다양한 선택과 반복 가능 포함.
예를 들어, 식 / \의 D {3} - \의 D {2} - \ D는 {2} / m 분배기 템플릿이어서, "/"이고, 기호«의 m의»를 수정한다.
정규 표현식의 모든 힘은 메타 문자를 사용하여 인코딩됩니다. "\"- 주요 언어 메타 문자는 백 슬래시입니다. 그것은 반대에 문자를 다음의 형식이 변경 (예. E.는 일반 문자 와일드 카드와 그 반대로 변환). «|», 대체 템플릿을 지정하는 또 다른 중요한 메타 문자는 직선이다. 메타 문자의 더 많은 예제 :
| ^ | 객체 나 문자열을 시작합니다 |
| ( | 서브 패턴을 시작합니다 |
| ) | 최종 서브 패턴 |
| { | 시작 정량 |
| } | 최종 정량 |
| \ D | 0부터 9까지의 십진수 |
| \ D | 숫자가 아닌 모든 문자 |
| \의 | 빈 기호, 공간, 탭, |
| \ w | 기호 사전 |
PHP 정규식 별도 유효한 문자로 간주 공간이므로 다른 XYZ 및 ABC의 표현을 처리하는 단계를 포함한다.
서브 패턴
괄호로 PHP는 정규 서브 패턴에, 그들은 때로는 "서브 표현식"라고합니다. 다음과 같은 기능을 수행합니다 :
할당 대안. 예를 들어, 열 패턴 (일 | 버드 |) "파이어 버드"와 "핫"단어 "열"과 일치한다. 그리고 괄호없이 단지 빈 문자열, "새"와 "핫"이 될 것입니다.
"화려한"서브 패턴. 이 패턴이 문자열과 일치하는 경우, 모든 경기를 반환 것을 의미한다. 명확하게하기 위해, 우리는 예를 제공합니다. 다음과 같은 정규 표현식을 감안할 때 : -와 일치의 캐릭터, "승자가 금메달을 가져옵니다."승자는 수신 (컵) (금 | | 골드 메달은 () 도금) 초기 문구뿐만 아니라, 검색 결과가 발급됩니다 : "금메달", "메달을", "금".
운영자 반복 (kvadrifikatory)
정규 표현식을 컴파일에서 숫자 및 기호의 반복을 분석하는 것이 필요하다. 이 문제가 아니라면 반복을 많이하지 않습니다. 우리는 그들의 정확한 숫자를 모를 때 무엇을해야 하는가? 이 경우에는 특별한 메타 문자를 사용하는 것이 필요하다.
수를 지정하는 메타 문자 - kvadrifikatory을 사용하여 반복에 대한 설명. Kvadrifikatory 유형은 두 가지입니다 :
- 괄호 안에 공통적;
- 감소.
이러한 X {2,5} 아니라 중괄호 두 숫자의 형태로 사용할 반복 소자의 최소 및 최대 값에 의해 터치 전체 정량. 반복의 최대 수를 알 수없는 경우, 두 번째 인수가 지정되지 : X {2}.
축약 한정사 불필요한 구문 오버로딩을 피하기 위해 반복에 대한 가장 일반적인 기호이다. 일반적으로 세 가지 상처가있다 :
* 1 - {0}에 해당 제로 이상의 반복.
2. + - 하나 이상의 반복, 즉, {1} ...
3.? - 제로 또는 하나의 반복 - {0,1}.
예 정규식
최고의 교과서 - 정규 표현식, 예를 배우는 사람들을 위해. 우리는 최소한의 노력으로 자신의 기회를 보여 그 몇 가지를 제공합니다. 모든 위의 코드는 PHP 4.x 및 버전과 완벽하게 호환됩니다. 충분히 우리가 완전히 구문 고려 J .. 프리들, "정규 표현식"으로 책을 추천 모든 언어 기능의 구문과 사용법을 이해하고,뿐만 아니라 PHP뿐만 아니라, 파이썬, 펄, MySQL은, 자바, 루비, 및 C #에 대한 정규 표현식의 예들이있다합니다.
검증 E-mail 주소
작업. 방문자가 주소 이메일을 요청하는 인터넷 페이지가있다. 정규 표현식은 메시지를 보내기 전에 주소의 정확성을 확인해야합니다. 검사는 지정된 사서함이 실제로 존재하고 메시지를받는 것을 보장하지 않습니다. 그러나 수 분명히 잘못된 주소를 걸러.
결정. 모든 프로그래밍 언어와 마찬가지로, PHP에서 정규식 이메일 주소 확인은 다른 방법으로 구현하고,이 문서의 예는 최종적이고 유일한 선택하지 않습니다 수 있습니다. 따라서, 각각의 경우에, 우리는 프로그래밍 및 특정 구현은 개발자에 전적으로 의존 할 때 고려해야 할 요구 사항의 목록을 제공해야한다.
따라서, 유효한 이메일을 테스트하는 표현은, 다음의 조건을 확인해야합니다 :
- 시작의 존재는 @ 기호 라인, 그리고 틈이 없습니다.
- @ 기호의 주소의 도메인 부분은 도메인 이름에 대한 유효한 문자가 포함되어 있습니다. 같은 사용자의 이름에 적용됩니다.
- 사용자 이름을 확인하면 아포스트로피 또는 수직 라인으로 특수 문자의 존재를 결정하는 것이 필요하다. 이러한 기호는 잠재적 위험 및 SQL 주입이 공격 같은 종류에 포함 할 수 있습니다. 주소를 피하십시오.
- 사용자 이름은 문자열의 첫 번째 또는 마지막 문자하지 않을 수 있습니다 하나의 점을, 수 있습니다.
- 도메인 이름은 적어도 두 개 이상이고 6 자 포함해야합니다.
예, 계정에 이러한 모든 조건을 고려하는 것은 다음 그림에서 볼 수 있습니다.
의 URL의 검증
작업. 지정된 텍스트 문자열이 유효한지 여부를 확인 주소 URL. 다시 한번, 우리는 정규 표현식의 URL 검사는 다양한 방식으로 구현 될 수 있습니다.
결정. 다음과 같이 우리의 최종 버전은 다음과 같습니다
/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]{2,6})([\/\w \ .- *) * \ /? $ /
이제 도면을 사용하여 더 구체적으로 그 구성 요소를 분석 할 수 있습니다.
| 제 1 항에있어서, | URL이 모든 문자가 없어야하기 전에 |
| 제 2 항에있어서, | 필수 접두사의 존재를 확인«의 HTTP» |
| 항목 3 | 어떤 상징이 없어야합니다 |
| 제 4 | 만약이«의», 보안 연결에 URL 포인트«HTTPS» |
| 제 5 항에있어서, | 의 필수 부분 "//" |
| 제 6 항에있어서, | 어떤 자 없다 |
| 페이지. 7-9 | 검증 첫 번째 레벨 도메인 및 지점의 존재를 |
| p.10-13 | 두 번째 레벨과 포인트를 작성하는 도메인 확인 |
| p.14-17 | 파일 구조 URL - 숫자, 문자, 밑줄, 대시, 점의 세트, 그리고 마지막에 슬래시 |
신용 카드 번호를 확인합니다
작업. 당신은 가장 일반적인 결제 시스템의 입력 한 신용 카드 번호의 검증을 구현해야합니다. 유일한 카드 변종 비자와 마스터.
결정. 식을 만들 때 입력 방에서 고려 격차의 존재 가능성을해야합니다. 지도에있는 숫자는 쉽게 읽고 받아쓰기 그룹으로 나누어집니다. 따라서 사람이 (즉. E. 공백을 사용하여) 이런 식으로 숫자를 입력하려고 할 수있는 자연이다.
계정에 가능한 공백이나 하이픈을 취하는 보편적 인 표현을 쓰기, 단순히 숫자를 제외한 모든 문자를 버리고보다 더 복잡하다. 따라서, 우리는 숫자를 제외한 모든 문자를 제거 와일드 카드 식 / D를 사용하는 것이 좋습니다.
지금 당신은 수표 번호로 직접 이동할 수 있습니다. 모든 기업은 신용 카드 발급은 고유 한 번호 형식을 사용합니다. 예에서이 사용되며, 클라이언트는 회사의 이름을 입력 할 필요가 없습니다 - 그것은 수에 의해 결정됩니다. 비자 카드는 항상 숫자 4로 시작하여 13 또는 16 자리의 길이를 갖는다. 마스터 카드는 결과적으로 긴 숫자 16과 51-55의 범위에서 시작, 우리는 다음과 같은 식을 얻을 :
주문을 처리하기 전에 상기 Luhn 알고리즘 계산 번호의 마지막 자릿수를 시험 할 수있다.
확인 전화 번호
작업. 입력 한 전화 번호의 정확성을 확인하고 있습니다.
결정. 고정 및 이동 전화 번호에서 숫자의 수는 상당히 그래서 보편적으로, 전화 번호를 올바르게 불가능 정규식을 사용하여 확인, 국가에 따라 달라집니다. 그러나 국제 전화 번호는 패턴을 확인하기위한 엄격한 형식과 완벽한 있습니다. 더욱 더 많은 국가 전화 사업자가 동일한 표준을 충족하려고 너무. 다음과 같이 방 구조는 다음과 같습니다
+ CCC.NNNNNNNNNNxEEEE, 여기서
- C는 - 1-3 개의 숫자로 이루어진 국가 코드입니다.
- N - 14 자리까지의 숫자입니다.
- E - 옵션 확장.
플러스는 필수 불가결 한 요소이며, 부호 X는 확장을 필요로하는 경우에만 존재합니다.
그 결과 우리는 다음 식을 가지고 :
^ \ + [0-9] {1,3 } \ [0-9] {4,14}. (?. X +)? $
범위의 숫자
작업. 특정 범위의 일치 정수를 보장하는 것이 필요하다. 또한, 정규 표현식 범위에서 전용 번호를 찾을 필요가있다.
결정. 다음은 가장 일반적인 경우 중 일부에 대한 몇 가지 표현은 다음과 같습니다 :
| 1 ~ 24 시간을 결정 | ^ (1 [0-2] | [1-9]) $ |
| 월 1-31 일 | ^ (3- [01] | [12] [0-9] | [1-9]) $ |
| 초 또는 분 0-59 | ^ [1-5]? [0-9] $ |
| 1 내지 100의 숫자 | * (100 |? [1-9] [0-9]) $ |
| 올해 366의 날 | ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2}? | [1-9] [0-9]) $ |
검색 IP-주소
작업. 주어진 문자열이 000.000.000.000-255.255.255.255의 범위에서의 IPv4 형식의 유효한 IP 주소인지 확인하는 것이 필요하다.
결정. PHP의 언어 문제와 마찬가지로, 정규 표현식은 많은 varintov 있습니다. 예를 들어,이 :
표현의 온라인 검사
초보자 때문에 "일반"프로그래밍 언어와 다른 구문의 복잡성으로 어려울 수 있습니다 올바르게 정규식을 확인합니다. 이 문제를 해결하기 위해, 쉽게 당신이 실제 텍스트에서 만든 템플릿의 정확성을 확인 할 수 있도록 많은 온라인 테스터 표현이있다. 프로그래머는 발현 및 검증 데이터를 입력하면 즉시 처리 결과를 참조. 일반적으로 가장 확장 된 언어에 대한 정규 표현식, 예 및 구현의 차이를 자세히 설명 참조 섹션을 제시있다.
그러나 완전히 신뢰 온라인 서비스에 결과는 PHP를 사용하는 모든 개발자를위한 권장하지 않습니다. 정규 표현식 작성 및 직접 확인, 자격을 제기하고 오류가 없음을 보장한다.
Similar articles
Trending Now