jQuery 소스코드 분석-02 정규식 RegExp 자주 사용되는 정규식_jquery

WBOY
풀어 주다: 2016-05-16 17:59:32
원래의
867명이 탐색했습니다.

작성자: nuysoft/JS Siege Master/Gao Yun QQ: 47214707 이메일: nuysoft@gmail.com
성명: 이 기사는 원본 기사입니다. 재인쇄해야 하는 경우 출처를 표시하고 원본 링크를 유지하세요.
다음 기사 미리보기: jQuery에서 정규식 분석

2.4 일반적으로 사용되는 정규식
인터넷에서 널리 유포되는 "자주 사용하는 정규식"이라는 글을 찾아서 하나씩 분석해 보니, 부족한 점을 발견하고 추가 및 수정을 하게 되었습니다.

코드 복사 코드는 다음과 같습니다.

자주 사용하는 수치 정규화(엄격 매칭)
일반적인 의미
^[1-9]d*$는 양의 정수와 일치
^-[1-9]d*$는 음의 정수와 일치
^-?[1-9]d*$는 일치 정수
^[1-9]d*|0$은 음수가 아닌 정수와 일치합니다(양의 정수 0).
^-[1-9]d*|0$은 양수가 아닌 정수와 일치합니다(음의 정수 0).
^[ 1-9]d*.d*|0.d*[1-9]d*$는 양의 부동 소수점 숫자와 일치합니다
^-([1-9]d*.d*|0 .d*[1- 9]d*)$는 음수 부동 소수점 숫자
^-?([1-9]d*.d*|0.d*[1-9]d*|0?와 일치합니다. 0 |0)$는 부동 소수점 숫자와 일치합니다. Point
^[1-9]d*.d*|0.d*[1-9]d*|0?.0 |0$은 음수가 아닌 부동 소수점과 일치합니다. 숫자(양수 부동 소수점 숫자 0)
^ (-([1-9]d*.d*|0.d*[1-9]d*))|0?.0 |0$는 비-와 일치함 양의 부동 소수점 숫자(음의 부동 소수점 숫자 0)

코드 복사 코드는 다음과 같습니다.

일반적인 문자열 정규식

정규 의미 보충
^[A-Za-z] $는 26개의 영문자로 구성된 문자열 또는 /^[a-z] $/i와 일치합니다.
^[A-Z] $는 영문 대문자 26자로 구성된 문자열과 일치합니다.
^[a-z] $로 구성된 문자열은 영문 소문자 26자로 구성된 문자열과 일치합니다.
^[A-Za-z0-9 ] $는 숫자와 영문 26자로 구성된 문자열과 일치합니다. w에는 밑줄이 포함되어 있습니다_
^w $는 숫자, 영문 26자 또는 밑줄로 구성된 문자열과 일치합니다.
일반적으로 사용되는 숫자 정규화와 공통 문자열 정규화는 다음과 같습니다. 가장 기본적인 규칙성 적용과 독자들은 이를 입문 연습으로 사용할 수 있으며, 의미를 빨리 이해할 수 있는지 확인해 보십시오.

코드 복사 코드는 다음과 같습니다.

한자 일치

일반적으로 사용되는 정규 표현식은 [u4e00-u9fa5]이지만 이 범위는 완전하지 않습니다. 예:
/[u4e00-u9fa5]/.test( '⻏' ) // 부수 ⻏ 테스트, false 반환
유니코드 버전 5.0 인코딩에 따르면 한자를 정확하게 판단하려면 다음을 포함해야 합니다.
범위 의미 범위 의미
2E80-2EFF CJK 부수 보충 2F00-2FDF 강희 사전 부수
3000-303F CJK 기호 및 구두점 31C0-31EF CJK 획
3200-32FF 닫힌 CJK 텍스트 및 월 3300- 33FF CJK 호환
3400-4DBF CJK 통합 표의 문자 기호 확장 A 4DC0-4DFF I Ching 64개 육각형 기호
4E00-9FBF CJK 통합 표의 문자 기호 F900-FAFF CJK 호환 상형 문자
FE30-FE4F CJK 호환 형식 FF00 -FFEF 전각 ASCII, 전각 구두점
따라서 한자를 일치시키는 올바른 정규식은 다음과 같습니다.
var rcjk = /[u2E80-u2EFFu2F00-u2FDFu3000-u303Fu31C0-u31EFu3200-u32FFu3300-u33FFu3400-u4DBFu4DC 0 -u4DFFu4E00- u9FBFuF900-uFAFFuFE30-uFE4FuFF00-uFFEF] /g;
구두점과 기호를 일치시키지 않으려면 정규식에서 해당 범위를 제거하세요.
3000-303F CJK 기호 및 구두점 FF00- FFEF 전각 ASCII, 전각 구두점

코드 복사 코드는 다음과 같습니다.

은 문자열 길이를 계산하는 데 사용할 수 있는 2바이트 문자(한자 포함)

[^x00-xff]와 일치합니다(2바이트 문자는 2로 계산됨). , ASCII 문자는 1로 계산됩니다). 코드 예는 다음과 같습니다.
console .info( "abc".replace( /[^x00-xff]/g,"aa" ).length ) // 3
console.info( "한자".replace( /[^x00-xff]/ g,"aa" ).length ) // 4
console.info( "abc汉字".replace( /[ ^x00-xff]/g,"aa").length ) // 7

코드 복사 코드는 다음과 같습니다.

HTML 태그와 일치하는 정규식

먼저 인터넷에 유통되는 버전에 대해 이야기해 보겠습니다.
<(S*?)[^>]*>.*?< ; /1>|<.*? />
*? *는 0 또는 1을 의미하며, 둘은 0 이상을 식별하기 위해 중첩되며, *
( S*?) 태그의 길이는 0보다 커야 하므로
|<.*?/> >를 얻을 수 없습니다
<.*? />

와 같은 일부 태그는 닫힐 수 없습니다.
다음과 같이 수정됨:
var rtag = /^<([a-z] )s*/?>.*(?:)?$/i
rtag.exec( ' <-div>') // null
rtag.exec( '
abc') // ["
abc", "div"]
이것은 두 번째와 같이 표현식도 불완전합니다. 이 테스트 문은 텍스트 내용이 포함된 태그를 추출하기 위해 작성되었습니다. 엄격하게 일치시키려면 다시 수정할 수 있습니다.
var rtag = /^<([a-z ] )s*/?> ( ?:)?$/i // 중간 .* 제거
이 일반 규칙의 적용 범위는 단순 태그 일치 및 추출로 제한되며 일치할 수 없습니다. 중첩된 태그.


코드 복사 코드는 다음과 같습니다.
정기 매칭 선행 및 후행 공백 문자 표현식

먼저 인터넷에 유포되는 버전에 대해 이야기해 보겠습니다.
^s*|s*$
는 줄의 시작과 끝에서 공백 문자를 삭제할 수 있으며, 예:
' t nr abc t nr '.replace( /^s*|s*$/g, '' ) // abc
그러나 s*를 사용하면 문자열의 시작 부분에 s가 있는지 확인할 수 없습니다. 또는 종료합니다. 예를 들어
/^s *|s*$/.test( 'abc' ) // true
다음과 같이 수정합니다.
^s |s $
' t nr abc t nr '.replace( /^s |s $/ g, '' ) // abc
/^s |s $/.test( 'abc' ) // false


코드 복사 코드는 다음과 같습니다.
이메일 주소와 일치하는 정규식

먼저 이메일의 규칙을 소개합니다: local-part@domain
 로컬 부분의 최대 길이는 64, 도메인의 최대 길이는 253, 최대 길이는 256입니다.
z 로컬 부분은 모든 ASCII를 사용할 수 있습니다. 문자:
naut 대문자 및 소문자 영문자 a-z, A-Z
n 숫자 0-9
n 문자!#$%&'* -/=?^_`{|}~
n 문자 . 첫 번째와 마지막이 될 수 없으며, 두 번 연속해서 나타날 수 없습니다.
ν 단, 일부 메일 서버에서는 특수 문자가 포함된 이메일 주소가 거부됩니다.
z 도메인(도메인 이름)은 영문 26자, 숫자 10자, 영문 26자, 숫자 10자, 하이픈 -
nn 하이픈 - 첫 번째 문자는 사용할 수 없습니다.
nn 최상위 도메인 이름(com, cn 등) 길이는 2~6자입니다.
먼저 인터넷에 유통되는 버전에 대해 이야기해 보겠습니다. :
w ([- .]w )*@w ([-.]w )*.w ([- .]w )*
() 설명할 수 없는 그룹화, 녹음하지 않고 그룹화만 하면 (?:)
@w 도메인을 사용하면 밑줄_을 포함할 수 없습니다.
w ([-.]w )* 최상위 수준 도메인 이름이
규칙을 준수하지 않으며 다음과 같이 수정됩니다.
var 재메일 = /^([w-_] (?:.[w-_] )*)@((?:[a-z0-9] (? :-[a-zA-Z0-9] )*) .[a-z]{2,6})$/i
remail.exec( 'nuysoft@gmail.com' ) // "nuysoft@gmail.com ", "nuysoft", "gmail.com"]
remail.exec( 'nuysoft@gmail.comcom' ) // null
remail.exec( 'nuysoft@_gmail.com ) // null
개정된 정규식에는 다음과 같은 제한 사항이 있습니다. 중국 메일함과 중국 도메인 이름을 지원합니다. 지원하지 않는 이유는 개인 취향이고 이런 화려한 것을 싫어하기 때문입니다.
z 특수 기호를 지원하지 않으며, 비 메일 서버 거부를 방지하며, 필요한 경우 추가할 수 있습니다.
참고기사:
http://en.wikipedia.org/wiki/Email_address
http://baike.baidu.com/view/119298.htm



코드 복사 코드는 다음과 같습니다.

정규식 일치 URL

먼저 인터넷에 유통되는 버전에 대해 이야기해 보겠습니다.
[a-zA-z] ://[^s]*
대략, URL의 각 블록이 그룹화되지 않았습니다
수정 사항은 다음과 같습니다(인터넷에 유포되는 다른 버전):
var _url = "^((https|http|ftp|rtsp|mms)?://) ?" / /
"(([0-9a-z_!~*'().&= $%-] : )?[0-9a-z_!~*'().&= $%- ] @) ?" // ftp user@
"(([0-9]{1,3}.){3}[0-9]{1,3}" // IP 형식의 URL- 199.194 .52.184
"|" // IP 및 DOMAIN(도메인 이름) 허용
"([0-9a-z_!~*'()-] .)*" // 도메인 이름 - www. > "([ 0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." // 2차 도메인 이름
"[a-z]{2 ,6})" / / 첫 번째 수준 도메인 - .com 또는 .museum
"(:[0-9]{1,4})?" // 포트 - :80
"((/?) |" // 파일명이 없으면 슬래시가 필요하지 않습니다
"(/[0-9a-z_!~*'().;?@&= $,%#-] ) /? )$";
var rurl = new RegExp( _url, 'i' );

테스트:
rurl.exec( 'baidu.com' ) // ["baidu.com", 정의되지 않음, 정의되지 않음, 정의되지 않음, 정의되지 않음, "baidu.com", 정의되지 않음, "baid", 정의되지 않음, 정의되지 않음, "", "", 정의되지 않음]
rurl.exec( 'http://baidu.com' ) / /
rurl.exec( 'http://www.baidu.com' ) // ["http://baidu.com", "http://", "http", 정의되지 않음, 정의되지 않음, "baidu .com", undefound, "baid", undefound, undefine, "", "", undefine]
rurl.test( 'baidu' ) // true
그래도 사용하기 쉬운 것 같아요 별로 유용하지 않습니다. TODO를 배워야 합니다.


코드 복사 코드는 다음과 같습니다.
일치합니까? 계정 법적

먼저 인터넷에 유통되는 버전에 대해 이야기해 보겠습니다.
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
(시작 문자 포함, 5~16자 허용 섹션, 영숫자 밑줄 허용)
제한은 문자로 시작해야 합니다. 예를 들어 QQ 로그인 플랫폼에서는
제한이 밑줄로 시작할 수 없습니다. 예를 들어 Baidu에서는 허용하므로 간단합니다.
수정은 다음과 같습니다.
var ruser = /w{4,16}/


코드 복사 코드는 다음과 같습니다.
국내 전화번호 매칭

온라인에 유통되는 버전 매우 유용합니다:
d{3}-d{8}|d{4}-d{7}
설명: 일치 형식은 0511-4405222 또는 021-87888822

입니다.

코드 복사 코드는 다음과 같습니다.
Tencent QQ 계정과 일치

인터넷에 돌아다니는 버전은 매우 유용합니다:
[1-9][0-9]{4,}
댓글: Tencent QQ 숫자는 10000부터 시작합니다


코드 복사 코드는 다음과 같습니다.
중국 우편번호 일치

버전 인터넷에 유통되는 것은 매우 유용합니다:
[1-9]d{5}(?!d)
댓글: 중국 우편번호는 6자리 숫자입니다


코드 복사 코드는 다음과 같습니다.

신분증 일치

먼저 인터넷에 유통되는 버전에 대해 이야기해 보겠습니다.
d{15}|d{18}
d{15}
d{ 18} 네 판단은 좀 거칠지만
주소, 생년월일, 성별 등은 신분증에서 파싱이 가능하므로 특별한 설명은 다음과 같습니다.
z 신분증 규정
중국 신분증 은 15자리(1세대) 또는 18자리(2세대)인데 차이점은 2세대 인증서는 1세대 인증서 7자리 앞에 19만 추가하고 마지막에 인증코드를 추가한다는 점입니다. 18자리로 변환하여 18자리 숫자 구성(주소, 생일, 성별)을 구문 분석합니다.
코드는 다음과 같습니다.
function parseID(ID) {
if ( ID.length == 15 ) {
// 18비트로 업그레이드
ID = ID.substr( 0, 6 ) "19" ID.substr( 6 )
// 처음 17자리에 해당하는 계수
var Rank = [
"7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9 ", "10", "5", "8", "4" , "2"
];
// 처음 17은 가중치를 17로 나눈 나머지에 해당하는 마지막 ID 번호입니다
var last = [
"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2 "
];
// 가중 합계
for ( var i = 0, sum = 0, len = ID.length; i sum = ID[ i ] * 순위[ i ]// 마지막 숫자 추가
ID = last[ sum % 11 ]
if ( ID.length != 18 ) return null; >var match =rid.exec( ID );
return match ? {
ID : ID,
area : match[ 1 ],
y : match[ 2 ],
m : match[ 3 ],
d : match[ 4 ],
sex : match[ 5 ] % 2
} : null
}
제한 사항:
 주소 코드는 다음과 같습니다. 여기서만 구문 분석되었습니다. 코드를 실제 주소로 변환하는 방법은 Du Niang에게 문의하세요.
l 반환된 개체의 성별은 1(남성) 또는 0(여성)이며, 페이지 표시에 필요한 경우 다음과 같이 변환할 수 있습니다. "남성" : "여성"
테스트:
console.info(parseID( "142327840821047" ) );
console.info(parseID("142327198408210470" )
참조:
http://baike.baidu. com/view/118340 .htm#1





코드 복사
코드는 다음과 같습니다. IP 주소 일치 먼저 인터넷에 유통되는 버전에 대해 이야기해 보겠습니다.
d .d .d .d
d 개수에는 제한이 없습니다
수정 사항은 다음과 같습니다.
var rip = /^(?:( ?:[01]?d{1,2}|2[0-4]d|25[0-5]).){3 }(?:[01]?d{1,2}|2[0 -4]d|25[0-5])$/
rip.test( "192.168.1.1" ) // true
rip.test( "0.0.0.0" ) // 참
rip.test( "255.255.255.255" ) // 참
rip.test( "256.255.255.255" ) // 거짓
그룹화를 더 늘립니다.
var rip2 = /^([01]?d {1,2}|2[0-4]d|25[0-5]).([01]?d{1, 2}|2[0-4]d|25[0-5]) ([01]?d{1,2}|2[0-4]d|25[0-5]).([01 ]?d{1,2}|2[0-4]d|25[ 0-5])$/;
rip2.exec( "192.168.1.1" ) // ["192.168.1.1", " 192", "168", "1", "1"]
rip2 .exec( "0.0.0.0" ) // ["0.0.0.0", "0", "0", "0", " 0"]
rip2.exec( "255.255.255.255" ) // [ "255.255.255.255", "255", "255", "255", "255"]
rip2.exec( "256.255 .255.255" ) // null

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!