1 基本数据类型

  参见W3C的教程即可

2 正则表达式

  参考博文:点击前往

3 身份证校验

  参考博文:点击前往

<div class="panel panel-primary"><div class="panel-heading">身份证编号验证</div><div class="panel-body div_body"><div class="form_div"><form (ngSubmit)="onNgSubmit()" [formGroup]="idcardForm"><mat-form-field><input type="number" matInput matTooltip="身份证前六位数字代表地址信息" placeholder="请输入身份证前6位" formControlName="address" /><mat-error *ngIf="idcardForm.hasError('required', 'address')"><span>6为地址是必填项</span></mat-error><mat-error *ngIf="idcardForm.hasError('addressFormatValidator', 'address')"><span>{{idcardForm.getError('addressFormatValidator', 'address')?.desc}}</span></mat-error><mat-error *ngIf="idcardForm.hasError('addressLengthValidator', 'address')"><span>{{idcardForm.getError('addressLengthValidator', 'address')?.desc}}</span></mat-error></mat-form-field><mat-form-field><input type="number" matInput matTooltip="身份证的第7到10位代表出生年份" placeholder="请输入年份" formControlName="year" /><mat-error *ngIf="idcardForm.hasError('required', 'year')"><span>4为年份是必填项</span></mat-error><mat-error *ngIf="idcardForm.hasError('yearFormatValidator', 'year')"><span>{{ idcardForm.getError('yearFormatValidator', 'year')?.desc }}</span></mat-error></mat-form-field><mat-form-field><input type="number" matInput matTooltip="身份证第11到12位代表出生月份" formControlName="month" placeholder="请输入出生月份" /><mat-error *ngIf="idcardForm.hasError('required', 'month')"><span>2位出生月份是必填项</span></mat-error><mat-error *ngIf="idcardForm.hasError('monthFormatValidator', 'month')"><span>{{idcardForm.getError('monthFormatValidator', 'month')?.desc}}</span></mat-error></mat-form-field><mat-form-field><input type="number" matInput matTooltip="身份证的第13到14位代表出生天数" placeholder="请输入出生天数" formControlName="day" /><mat-error *ngIf="idcardForm.hasError('required', 'day')"><span>2位出生天数是必填项</span></mat-error><mat-error *ngIf="idcardForm.hasError('dayFormatValidator', 'day')"><span>{{idcardForm.getError('dayFormatValidator', 'day')?.desc}}</span></mat-error></mat-form-field><mat-form-field><input type="number" matInput matTooltip="身份证的15到17位数字代表顺序码" formControlName="sequenceCode" placeholder="请输入顺序码" /><mat-error *ngIf="idcardForm.hasError('required', 'sequenceCode')"><span>顺序码是必填项</span></mat-error><mat-error *ngIf="idcardForm.hasError('sequenceCodeValidator', 'sequenceCode')"><span>{{idcardForm.getError('sequenceCodeValidator', 'sequenceCode')?.desc}}</span></mat-error></mat-form-field><mat-form-field><input type="text" matInput matTooltip="身份证最后一位是校验码" formControlName="checkCode" placeholder="请输入校验码" /><mat-error *ngIf="idcardForm.hasError('required', 'checkCode')"><span>校验码是必填项</span></mat-error><mat-error *ngIf="idcardForm.hasError('checkCodeValidator', 'checkCode')"><span>{{idcardForm.getError('checkCodeValidator', 'checkCode')?.desc}}</span></mat-error></mat-form-field><mat-form-field><input type="text" matInput matTooltip="中国的公民身份证编号总共有18位" formControlName="idcard" placeholder="请输入身份证编号" /><mat-error *ngIf="idcardForm.hasError('required', 'idcard')"><span>身份证是必填项</span></mat-error><mat-error *ngIf="idcardForm.hasError('idcardValidator', 'idcard')"><span>{{idcardForm.getError('idcardValidator', 'idcard')?.desc}}</span></mat-error></mat-form-field><br /><br /><div><button mat-raised-button [disabled]="!idcardForm.valid" type="submit" >提交</button></div></form></div></div><div class="panel-footer">2018-3-15 09:42:00</div>
</div>

HTML

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Http } from '@angular/http';
import { TestService } from '../test.service';
import { ClientBaseInfo } from '../../model/ClientBaseInfo';
import { FormControl, FormGroup, FormBuilder, Validators } from '@angular/forms';
import 'rxjs/add/operator/debounceTime';      @Component({selector: 'app-test-demo',templateUrl: './test-demo.component.html',styleUrls: ['./test-demo.component.scss']
})
export class TestDemoComponent implements OnInit {idcardForm: FormGroup;constructor(private formBuilder: FormBuilder) {}ngOnInit() {this.idcardForm = this.formBuilder.group({address: ['502225', [Validators.required, this.addressFormatValidator, this.addressLengthValidator], []],year: ['1993', [Validators.required, this.yearFormatValidator], []],month: ['11', [Validators.required, this.monthFormatValidator], []],day: ['12', [Validators.required, this.dayFormatValidator], []],sequenceCode: ['123', [Validators.required, this.sequenceCodeValidator], []],checkCode: ['X', [Validators.required, this.checkCodeValidator], []],idcard: ['500225199310031919', [Validators.required, this.idcardValidator], []]});}onNgSubmit() {console.log(this.idcardForm.value);}addressLengthValidator(fc: FormControl): {[key: string]: any} {let valid = String(fc.value).length === 6;if (fc.value === null) {return valid ? null : {addressLengthValidator: { desc : "你填了数据为什么要清除呢?"}}; } else {return valid ? null : {addressLengthValidator: { desc : "地址码的长度必须为6"}};}}addressFormatValidator(fc: FormControl): {[key: string]: any} {const value = fc.value;const addressRegx: RegExp = new RegExp(/^[1-9]\d{5}/);let valid = addressRegx.test(value);return valid ? null : {addressFormatValidator: {desc: "地址码长6位,以数字1-9开头,后5位为0-9的数字。"}};} // TODO:如何将多个验证条件写到一个验证器中去// addressValidator(fc: FormControl): {[key: string]: any} {//   const value = fc.value;//   const addressRegx: RegExp = new RegExp(/^[1-9]\d{5}/);//   if (String(value).length !== 6) {//     return {addressValidator: {desc: "地址码长6位。"}}//   }//   if (addressRegx.test(value)) {//     return {addressValidator: {desc: "以数字1-9开头,后5位为0-9的数字。"}};//   }// }yearFormatValidator(fc: FormControl): {[key: string]: any} {const yearRegx: RegExp = new RegExp(/(17|18|19|20)\d{2}/);const valid = yearRegx.test(fc.value);if (String(fc.value).length !== 4) {return {yearFormatValidator: {desc: "年份长度必须是4位"}};} else {return valid ? null : {yearFormatValidator: {desc: "年份必须是17、18、19、20作为开头"}};}}monthFormatValidator(fc: FormControl): {[key: string]: any} {const monthRegx: RegExp = new RegExp(/(0[1-9])|(1[0-1])/);const valid = monthRegx.test(fc.value);if (String(fc.value).length !== 2) {return  {monthFormatValidator: {desc: "月份长度必须是2位"}};} else {return valid ? null : {monthFormatValidator: {desc: "第一位数字为0,第二位数字为1-9;或者第一位数字为1,第二位数字为0-2"}};}}dayFormatValidator(fc: FormControl): {[key: string]: any} {const dayRegx: RegExp = new RegExp(/(([0-2][1-9])|10|20|30|31)/);const valid = dayRegx.test(fc.value);if (String(fc.value).length !== 2) {return {dayFormatValidator: {desc: "出生天数的长度必须是2位"}};} else {return valid ? null : {dayFormatValidator: {desc: "第一位数字为0-2,第二位数字为1-9;或者是10,20,30,31。"}};}}sequenceCodeValidator(fc: FormControl): {[key: string]: any} {const sequenceCodeRegx: RegExp = new RegExp(/\d{3}/);const valid = sequenceCodeRegx.test(fc.value);if (String(fc.value).length !== 3) {return {sequenceCodeValidator: {desc: '顺序码的长度必须是3位'}};} else {return valid ? null : {sequenceCodeValidator: {desc: '顺序码是数字'}};} }checkCodeValidator(fc: FormControl): {[key: string]: any} {const checkCodeRegx: RegExp = new RegExp(/[0-9xX]/);const valid = checkCodeRegx.test(fc.value);if (String(fc.value).length !== 1) {return {checkCodeValidator: {desc: '校验码的长度必须是1位'}};} else {return valid ? null : {checkCodeValidator: {desc: '校验码自能是数字或者X、x'}};} }idcardValidator(fc: FormControl): {[key: string]: any} {const checkCodeRegx: RegExp = new RegExp(/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/);const valid = checkCodeRegx.test(fc.value);if (String(fc.value).length !== 18) {return {idcardValidator: {desc: '身份证的长度必须是18位'}};} else {return valid ? null : {idcardValidator: {desc: '身份证格式错误'}};} }}

TS

转载于:https://www.cnblogs.com/NeverCtrl-C/p/8575991.html

ES01 数据类型、正则表达式、身份证校验相关推荐

  1. 日期,手机号码正则表达式校验,身份证校验等常用工具

    日期类工具 DataUtil public class DateUtils {/*** 北京时区*/public static final ZoneOffset BJ_ZONE = ZoneOffse ...

  2. Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式...

    Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年11 ...

  3. Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正

    Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年10 ...

  4. Java总结:正则表达式进行校验

    Java总结:正则表达式进行校验 目录 Java总结:正则表达式进行校验 一.校验数字的表达式 二.校验字符的表达式 了解理论知识,请点击:Java总结:正则表达式 一.校验数字的表达式 1 数字:^ ...

  5. 【补充一则】身份证校验的c#代码

    关于身份证号码的校验,网上的各种代码实在太多了.这里我补充一则C#的代码. 在网页上,通常是一个textbox让用户输入,然后用一个正则表达式验证控件,用这样一个正则表达式:\d{17}[\d|X]| ...

  6. 常用正则表达式—身份证号(JavaScript,Regex)

    简言 在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案.本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案. 身份证号码说明 居民身份证号码,正确.正式的称谓应该是&q ...

  7. 皇甫懒懒 华清远见Java学习笔记-身份证校验

    # 身份证校验 ## 身份证编码解析 ![image-20220414111909659](C:\Users\ASUS\AppData\Roaming\Typora\typora-user-image ...

  8. 微信小程序-----身份证校验

    1.在utils目录下创建idCardNumber.js文件 //身份证号严格校验 function identityIDCard(code) {     //身份证号前两位代表区域     var ...

  9. JavaScript的form表单验证中的身份证校验

    前几天,在项目中遇到一个问题,就是这个身份证校验,一般普通人的身份证号是有18位,当时我只想到了限制长度来做验证,因为着急下班,哈哈哈哈哈 直到昨天,才想到JavaScript中有个正则表达式,所以我 ...

最新文章

  1. 小冰负责人李笛:微软不缺钱,缺对未来的把握
  2. -Git 使用技巧 总结 MD
  3. Centos 7下搭建WordPress
  4. 以无代码的方式将Form打印内容转成生成PDF文件
  5. Flume Source 实例
  6. 第二章:用户登录管理模块
  7. leetcode 删除链表中的节点
  8. 漫步数学分析七——集合的闭包
  9. 20K~50K/月,上海随芯科技 算法 招聘:3D机器视觉、DSP、语音识别
  10. 十二生肖swift1.2
  11. Anaconda 国内镜像源整理
  12. 如何构建你的聊天界面
  13. jest单元测试-作用域
  14. 《高效能人士的七个习惯》:运用才是关键
  15. Arduino 水质检测仪(浊度、TDS、温度、电导率、吸光度、硬度)带18b20温度补偿。
  16. 微服务设计指导-使用云原生微服务解决传统海量跑批时引起的系统间“级联雪崩”以及效率
  17. 浪漫侧影 ( 题解 )
  18. 解码中的AnnexB和avcC两种分割数据方式
  19. 金融投资之重要财务指标 (From Corporate Finance, 6th Edition) 与Tushare数据接口
  20. 怎么用html写一个学校代码,[代码学校]简单实用的HTML代码分享_格桑梅朵_天涯部落_天涯社区...

热门文章

  1. scala连接postgre数据库
  2. 打开VMware的系统出错
  3. ARM的流水线与PC值的关系
  4. 第十一届河南省赛--A计划日
  5. 坑 之 Tensor XXX must be from the same graph as Tensor XXX
  6. 一个类及其对象初始化的过程
  7. 计算机组成原理-数制与编码
  8. x265-创建encdata
  9. android viewpager动态加载图片,Android使用ViewPager加载图片和轮播视频
  10. eclipse User Enties 顺序