当前位置: 首页 > news >正文

22.2 正则表达式-数据验证、数据变换

1. 数据验证

正则表达可用于验证文本是否满足某种给定的模式。

正则表达式也是一种语言,因此在使用之前必须先对其进行编译,并将编译结果保存在一个Regexp类型的变量里。以下两个函数即返回该变量的指针。

  • re, err := regexp.Compile("^[a-zA-Z0-9]{5,12}$") 
    • 在正则表达式未通过编译时返回错误
  • re := regexp.MustCompile("^[a-zA-Z0-9]{5,12}$") 
    • 在正则表达式未通过编译时引发恐慌

Regexp类型的MatchString方法根据其参数字符串与正则表达式是否匹配返回true或者false。当通过Regexp类型变量使用MatchString方法时,仅需提高1个被验证字符串即可,因为正则表达式已提前编译并保存在调用对象内部。

  • fmt.Println(username, "->", re.MatchString(username))

正则表达式已提前编译并保存在re内部,故该方法比regexp.MatchString函数少了一个参数。

// 数据验证
// 正则表达可用于验证文本是否满足某种给定的模式
// 正则表达式 = regexp.MustCompile(模式) 
// 验证通过 = 正则表达式.MatchString(被验证文本) 
package main
import ("fmt""regexp"
)
func main() {usernames := [...]string{"slimshady99","!asdf£33£3","roger","iamthebestuseofthisappevaaaar",}re := regexp.MustCompile("^[a-zA-Z0-9]{5,12}$")for _, username := range usernames {fmt.Println(username, "->",re.MatchString(username))}
}
// 打印输出:slimshady99 -> true!asdf£33£3 -> false	// !roger -> trueiamthebestuseofthisappevaaaar -> false 	// 字符数超过12

 2. 数据变换

正则表达可对文本中符合特定模式的内容进行替换。

Regexp类型的ReplaceAllString方法接受两个参数,第一个参数为被替换文本,第二个参数为替换文本。该方法将被替换文本中与调用变量中的正则表达式匹配的部分替换为替换文本。

  • an := regexp.MustCompile("[[:^alnum:]]")
    • 匹配由非(^)英语字母(alphabet)和数字(number)组成的字符集中的任意一个字符。
    • [:^ASCII类名:]      匹配“ASCII类”外的一个字符,“ASCII类”见附录的说明。
  • newUsername = an.ReplaceAllString(newUsername, "x")
    • 将newUsername中所有既非英语字母亦非数字的字符替换为"x"
    • 例如:!asdf£33£3 -> xasdfx33x3

先根据正则表达式对数据进行评估,检查其中是否含有非法字符。如果含有非法字符,再根据正则表达式将其替换为合法字符——数据清洗管道。

// 数据变换
// 正则表达可对文本中符合特定模式的内容进行替换
// 正则表达式 = regexp.MustCompile(模式) 
// 正则表达式.ReplaceAllString(被替换文本, 替换文本) 
package mainimport ("fmt""regexp"
)func main() {usernames := [...]string{"slimshady99","!asdf£33£3","roger","iamthebestuseofthisappevaaaar",}re := regexp.MustCompile(	//	定义正则表达1"^[a-zA-Z0-9]{5,12}$")an := regexp.MustCompile("[[:^alnum:]]")//定义用于数据替换的正则表达式2for _, username := range usernames {newUsername := usernameif len(newUsername) > 12 {	// 首先判断用户名是否符合长度要求newUsername = newUsername[:12]	// 不符合的直接截断}if !re.MatchString(newUsername) { // 检查用户名是否符合正则表达式1要求newUsername = an.ReplaceAllString(	// 将所有非法字符替换为xnewUsername, "x")}fmt.Println(username, "->", newUsername)}
}
// 打印输出:
slimshady99 -> slimshady99
!asdf£33£3 -> xasdfx33x3
roger -> roger
iamthebestuseofthisappevaaaar -> iamthebestus //截断

 

 

相关文章:

  • 广东工业大学领导一行莅临泰迪智能科技参观交流
  • 分数布朗运动FBM期权定价模型
  • SpringCloud 网关Gateway配置并使用
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • Luma AI如何注册:文生视频领域的新星
  • target目录的文件上传controller,无需做静态映射。以及上传路径配置
  • TQZC706开发板教程:10G光口ping测试
  • C++中的解释器模式
  • Java -jar 运行 报 MalformedInputException: Input length = 1
  • Mongodb数据库基本操作
  • jeecg快速启动(附带本地运行可用版本下载)
  • 可穿戴设备:苹果“吃老底”、华为“忙复苏”、小米“再扩容”
  • Java数据类型及运算符及数组(与C语言对比)
  • 数据治理:让数据提取更高效、更准确的关键
  • 综述:光学测量技术趋势
  • C++类的相互关联
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Vue2.x学习三:事件处理生命周期钩子
  • yii2权限控制rbac之rule详细讲解
  • 飞驰在Mesos的涡轮引擎上
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用 QuickBI 搭建酷炫可视化分析
  • 以太坊客户端Geth命令参数详解
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • MyCAT水平分库
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​2020 年大前端技术趋势解读
  • ​io --- 处理流的核心工具​
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​如何防止网络攻击?
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • $(selector).each()和$.each()的区别
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)Java 简介
  • (26)4.7 字符函数和字符串函数
  • (MATLAB)第五章-矩阵运算
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三)SvelteKit教程:layout 文件
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (算法)Travel Information Center
  • (一)VirtualBox安装增强功能
  • (转)原始图像数据和PDF中的图像数据
  • **PHP分步表单提交思路(分页表单提交)
  • .java 9 找不到符号_java找不到符号
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .netcore如何运行环境安装到Linux服务器