정기 디지털 인증에 대한 자세한 설명(코드 포함)

php中世界最好的语言
풀어 주다: 2018-03-30 14:21:15
원래의
3942명이 탐색했습니다.

이번에는 노트가 무엇인지 알려드리겠습니다. 실제 사례를 살펴보겠습니다.

1부: 수치 검증

1. 숫자만 포함하고 지정된 길이(N)를 포함하는 문자열을 확인합니다.

예를 들어, 숫자만 포함하고 123456과 같은 길이 6인 경우 다음 검증 방법을 사용하면 동일한 효과를 얻을 수 있습니다

\d{6}
[0-9]{6}
\d\d\d\d\d\d
로그인 후 복사

위 방법도 동일한 효과가 있으며 첫 번째 방법이 더 권장되며 더 간결합니다! 참고: 나중에 너무 장황하지 않고 좀 더 간결한 정규 표현을 사용하겠습니다!

2. 숫자만 포함하고 범위 길이(N-M)를 지정하는 단어 문자열을 확인합니다.

예를 들어 12345, 123456, 1234567과 같이 숫자만 포함하고 길이가 5~8 사이인 문자열을 확인하고 싶습니다. , 12345678 , 그러면 사용할 수 있는 검증 방법

3. 음수가 아닌 정수의 검증

분명히 0, 100, 56 등은 모두 음수가 아닌 정수이고, -12, 0135, 등은 음수가 아닌 정수가 아닙니다. 검증 데모는 다음과 같습니다.

021 -56은 양수가 아니기 때문에 선택되지 않음을 알 수 있습니다. (참고: ^가 사용됩니다. 이는 0 또는 [1-9]로 시작해야 함을 의미하므로 -56은 선택되지 않습니다. ^가 없으면 -56 중 56이 선택됩니다.)

4. 확인 모든 정수

0, 456, -65 등과 같은 모든 정수. 이는 임의의 정수이므로 양수와 음수가 아닌 정수를 결합해야 함을 의미합니다. 확인 데모는 다음과 같습니다.

  

그러므로 양수는 모두 0을 포함하고, 양수와 음수 모두 일치합니다.

5. 지정된 범위 내의 양의 정수 확인

예를 들어 465, 23, 5677 등과 같이 1~5678 범위의 양의 정수가 모두 이 범위에 속하는지 확인하려고 합니다. 이를 확인하는 방법은 무엇입니까? 걱정하지 마세요. 파티션 간을 확인할 수 있습니다.

  • b[1-9]d{0-2}b를 사용하여 1-999

  • b[1-4]d 사이의 모든 양의 정수를 확인하세요. {3}b 1000~4999

  • b5[0-5]d를 확인하려면 b를 사용하세요.{2}b 5000~5599

  • b56[0 -6]db를 사용하면 됩니다. 5600-5669

  • b567[0-8]b를 사용하여 5670-5678

사이의 모든 양의 정수를 확인하려면 다음을 사용하면 됩니다. 다음 정규 표현식은 사이의 모든 양의 정수를 확인합니다. 1-5678:

^([1-9]\d{0,2})|([1-4]\d{3})|(5[0-5]\d{2})|(56[0-6]\d)|(567[0-8])$
로그인 후 복사

근데 정말 그런가요? 검증 내용은 다음과 같습니다.

 

왜 이럴까요? ? ? 다음 세 숫자의 검증은 우리가 원하는 효과가 아닙니다! ! 왜냐하면 정규식은 일치할 때 왼쪽에서 오른쪽으로 일치하기 때문입니다. 그 중 2602와 4999는 [1-9]d{0,2}를 사용하여 일치할 수 있으므로 계속할 필요가 없습니다.

정규식의 순서를 반대로 바꿔볼까요? 아래와 같이:

^(567[0-8])|(56[0-6]\d)|(5[0-5]\d{2})|([1-4]\d{3})|([1-9]\d{0,2})$
로그인 후 복사

효과는 다음과 같습니다:

이번에 우리를 행복하게 만드는 것은 1-5678 사이의 모든 숫자가 선택되었다는 것입니다! ! 그런데 789개 중 5개와 -5개가 선택됐습니다. 이는 첫 번째 그룹화 전에 ^만 추가했기 때문입니다. 우리가 해야 할 일은 각 그룹화 앞에 ^를 추가하는 것입니다. 아래와 같이:

^(567[0-8])|^(56[0-6]\d)|^(5[0-5]\d{2})|^([1-4]\d{3})|^([1-9]\d{0,2})$
로그인 후 복사

이번에는 효과에 문제가 없습니다.

다음에서 알 수 있습니다: 조합 순서 원칙(양의 정수): 최대값의 범위 조합부터 최소값의 범위 조합.

从这个例子受到启发,我们对于指定范围内的正整数的验证的第一个例子中的每一个分组后添加$或\b也可以解决问题。

也就是说下面的两行代码均有效:

^(567[0-8])|^(56[0-6]\d)|^(5[0-5]\d{2})|^([1-4]\d{3})|^([1-9]\d{0,2})$
^([1-9]\d{0,2})$|([1-4]\d{3})$|(5[0-5]\d{2})$|(56[0-6]\d)$|(567[0-8])$
로그인 후 복사

6.实数的验证

这里要介绍的实数的验证是至少包含一个小数点的实数,因此实数就包括了整数部分、小数部分和小数点。

验证方法如下:

-?(0|([1-9]\d*))\.\d+
로그인 후 복사

其中-?表示可以有负号也可以没有负号,(0|[1-9]\d*)表示整数部分可以是0也可以是不以0开头的其他整数,\.是为了对元字符.进行转义,\d+表示在小数点后面可以有1个或多个数字重复。所以它可以用来验证一般形式的实数(如0.0、1.2、-1.20等),还可以用来验证负0,如-0.0、-0.00等。

如果我们希望验证指定精度的实数,我们只需要把末尾的+修改成相应的精度即可,如下所示:

-?(0|([1-9]\d*))\.\d{3}$
로그인 후 복사

即表示小数部分长度为3的实数。

7.科学计数法的验证

科学计数法就是把一个数记成a*10^n的形式。其中,a是一位整数或着是只有一位整数的小数(如5,3.2等等),所以可知1<=|a|<10。而n是一位整数。所以不难得出科学计数法的验证方法如下所示:

^-?[1-9](\.\d+)?\*10\^-?\d+$
로그인 후 복사

第二部分:4种国内电话号码的验证

我们知道中国的电话号码的形式不外乎有下面四种:

1.手机号码

2.固定电话号码(不包括区号)

3.区号+固定电话号码

4.区号+固定电话号码+分机号

下面我们按照顺序逐一介绍

1.手机号码

目前国内的手机号码多是13开头、15开头和18开头,并且第三位数字目前都有【0-9】这10个数,所以验证起来就很简单了。如下所示:

显然第二种方法更简单一些。

2.固定电话号码(不包括区号)

固定电话号码一般为7位(如2268358)或8位(82668110),所以验证起来是非常简单的,如下所示:

但是,某个地区的电话号码往往是固定在一个具体的范围里的,比如新疆石河子某个地区为2268001-2268999,这时想要确定就需要稍微花一些功夫了。

我们可以把2268001-2268999划分为2268001-2268009和2268010-2268099和2268100-2268999。这样,把验证三者的正则表达式组合起来即可。如下所示:

2268((00[1-9])|(0[1-9]\d)|([1-9]\d{2}))
로그인 후 복사

PS 这里就不具体介绍啦,都是很简单的知识,如果有疑问可以看我的上一篇博文,它对基本知识阐述得很具体。

3.区号+固定电话号码验证

区号的长度一般为3-4位,固定电话号码的长度一般为7-8位,比如029-82668110为3位区号和8位固定电话号码的组合,0993-2268358是4位区号和7位固定号码的组合。且在区号和固定号码之间一般都是由-(连字符)链接的。可知,我们只需要对区号和固定电话分别验证即可。  

\b0\d{2,3}[- ]?\d{7,8}\b
로그인 후 복사

演示效果如下:

4.区号+固定电话号码验证+分机号码验证

一些比较大的公司、企业或者政府部门在向外部提供固定的电话号码是,除了区号、固定电话号码之外,还可能包括分机号码。

下面我们以4位的分级号码为例。一般在分机号码之前可能是空格,也可能是-(连字符),还可能什么都没有。 于是验证方法如下:

\b0\d{2,3}[- ]?\d{7,8}[- ]?\d{4}\b
로그인 후 복사

演示效果如下:

第三部分:2种身份证号码的验证

1.基本知识

15位身份证号码:

1985年我国实行居民身份证制度,当时签发的身份证号码是15位的。其中前6位为地址码,中间6位为出生日期码(年月日各用两位数字表示),最后三位为顺序码。

(注:顺序码是对同年、同月、同日出生的人编订序号,顺序码的奇数分配给男性,偶数分配给女性)

18位身份证号码:

1999年我国开始使用18位的身份证号。其中前6位为地址码,中间8位为出生日期码(年用4位表示,月日各用2位表示),最后四位为顺序码和校验码。

(注:年份用4位是因为使用2位会导致冲突,比如1903年和2003年出生的人。而校验码主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用X表示)

2. 15位身份证号码的验证

前6位地址码可以为任意数字,78位的年份码为任意数字,9和10位的月份码应当在01-12之间,11和12位的日期码在01-31之间,最后三位的顺序码为长度为3的任意字符串。于是验证方法如下:

复制代码 代码如下:


\b\d{8}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}\b

3. 18位身份证号码的验证

前6位地址码为任意数字,7-10位的年份码前两位以19或20开头(这里就不考虑18开头了),月日同15位的身份证号码,三位顺序码为长度为3的任意字符串,最后以为验证码为0-9或X。于是验证方法如下:

\b\d{6}(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)\b
로그인 후 복사

因为只要知道了思路,正则表达式写出来并不难,所以这里就不细讲了。

第四部分:邮政编码验证

我国邮政编码的编码规则:我国采用四级六位编码制,前两位表示省、市、自治区,第三位代表邮区,第四位代表县、市,最后两位代表投递邮局,最后两位是代表从这个城市哪个投递区投递的,即投递区的位置。例如:邮政编码“130021”“13”代表吉林省,“00”代表省会长春,“21”代表所在投递区。

因此验证我国的邮政编码就十分方便了,如下所示:

第五部分:两种IP地址的验证

IP地址可以简单验证,还可以精确验证。

1.简单IP地址验证

我首先ping到了http://www.jb51.net/的IP地址:42.121.252.58。 实际上IP地址一般是1~3位整数.1~3位整数.1~3位整数.1~3位整数,于是我们可以通过下面的正则表达式作简单验证:

([1-9]\d{0,2}\.){3}[1-9]\d{0,2}
로그인 후 복사

验证效果如下所示:

 

2.精确IP地址验证

显然,上面的简单IP地址验证是不精确的,比如999.999.999.999这就不是一个正确的IP地址。

我们知道32位IP地址的每一个数值都是在0~255之间,所以对于1~3位整数.1~3位整数.1~3位整数.1~3位整数我们应该将整数限制在0~255之间,显然,这里要使用分区间的方法了。

0-99之间可以这样表示:([1-9]\d?)|0              (注意这里的表示方法,如果这个数不为0,那么前面就不能有0)

100-199는 다음과 같이 표현될 수 있습니다: 1d{2}

200-249는 다음과 같이 표현됩니다: 2[0-4]d

250-255는 다음과 같이 표현됩니다: 25[0-5]

정확하게 IP 주소를 확인하는 방법은 다음과 같습니다.

코드를 복사하세요 코드는 다음과 같습니다


(((25[0-5])|2[0- 4]d|1d{ 2}|[1-9]d|0).){3}((25[0-5])|2[0-4]d|1d{2}|[1-9 ]d|0)

시연 효과는 다음과 같습니다.

그룹화가 중요하다는 점은 주목할 만합니다. 올바른 그룹으로 나누어야 문제가 없습니다.

위 내용은 이 글의 전체 내용입니다. 여러분의 공부에 도움이 되길 바랍니다.

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

일반 전역 매칭 패턴의 g 수정자 사용에 대한 자세한 설명

정규식 m 수정자 사용에 대한 자세한 설명(다중 줄 매칭)

위 내용은 정기 디지털 인증에 대한 자세한 설명(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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