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

Go语言学习记录——用正则表达式(regexp包)来校验参数

前言

最近坐毕设ing,简单的一个管理系统。
其中对于用户注册、登录功能,需要进行一些参数校验。
因为之前使用过,因此这里计划使用正则表达式进行校验。但是之前的使用也仅限于使用,因此这次专门进行一次学习,并做此记录。

什么是正则表达式

下面是菜鸟教程中给出的定义

正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。
正则表达式可以在文本中查找、替换、提取和验证特定的模式。

简单来说,他就是一个文字处理的工具,对文字进行一系列的处理。在Golang中,可以使用内置的regexp包来进行使用。

参数校验

使用MatchString

这里使用的是MatchString函数.


// MatchString reports whether the string s
// contains any match of the regular expression pattern.
// More complicated queries need to use Compile and the full Regexp interface.
func MatchString(pattern string, s string) (matched bool, err error) {re, err := Compile(pattern)if err != nil {return false, err}return re.MatchString(s), nil
}// Compile parses a regular expression and returns, if successful,
// a Regexp object that can be used to match against text.
//
// When matching against text, the regexp returns a match that
// begins as early as possible in the input (leftmost), and among those
// it chooses the one that a backtracking search would have found first.
// This so-called leftmost-first matching is the same semantics
// that Perl, Python, and other implementations use, although this
// package implements it without the expense of backtracking.
// For POSIX leftmost-longest matching, see CompilePOSIX.
func Compile(expr string) (*Regexp, error) {return compile(expr, syntax.Perl, false)
}// MatchString reports whether the string s
// contains any match of the regular expression re.
func (re *Regexp) MatchString(s string) bool {return re.doMatch(nil, nil, s)
}

根据该函数的源码和注释可以看出:其需要接受两个参数——校验规则pattern和待处理字符串s,其返回两个值——matched 是一个布尔值,表示是否匹配成功,err 是一个错误值,表示在匹配过程中是否出现了错误。

在函数内部,它首先使用 Compile 函数将 pattern 编译成一个 Regexp 对象。如果编译过程中出现错误,就会直接返回错误。如果编译成功,它会调用编译后的 Regexp 对象的 MatchString 方法来对字符串 s 进行匹配,最终将匹配结果返回。

校验规则

拿自己代码中用到的来举例

	passwordPattern = `^[a-zA-Z0-9]{6,12}$`

这个代表的是:参数a-z,A-Z,0-9,且长度在6-12位之间。
其他标识符规则如下:

.: 匹配任意单个字符,除了换行符。
*: 匹配前面的表达式零次或多次。
+: 匹配前面的表达式一次或多次。
?: 匹配前面的表达式零次或一次。
[]: 字符类,匹配括号内的任意一个字符。
|: 或操作符,匹配两边任意一个表达式。
(): 分组,用于将多个表达式组合在一起。

参考资源

本次学习主要参考自:

Golang-regexp包官方文档
https://pkg.go.dev/regexp

相关文章:

  • mysql进阶-索引基础
  • 高效构建Java应用:Maven入门和进阶(五)
  • 【JavaScript】es6开发常用技巧
  • Page 251~254 Win32 GUI项目
  • 使用MATLAB连接USRP
  • 6、C语言:输入与输出
  • [学习笔记]刘知远团队大模型技术与交叉应用L1-NLPBig Model Basics
  • 常见设计模式--通俗易懂版
  • 使用Spring Boot集成中间件:Elasticsearch基础->提高篇
  • [力扣 Hot100]Day2 字母异位词分组
  • springCould中的Bus-从小白开始【11】
  • 数据库管理-第130期 JSON二元性(20240109)
  • 【Java SE语法篇】9.抽象类和接口
  • BC28 大小写转换
  • SQL DML
  • SegmentFault for Android 3.0 发布
  • [译]Python中的类属性与实例属性的区别
  • ES6 ...操作符
  • FastReport在线报表设计器工作原理
  • Joomla 2.x, 3.x useful code cheatsheet
  • k8s如何管理Pod
  • leetcode98. Validate Binary Search Tree
  • Otto开发初探——微服务依赖管理新利器
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 分享几个不错的工具
  • 你不可错过的前端面试题(一)
  • 区块链共识机制优缺点对比都是什么
  • 自制字幕遮挡器
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • !$boo在php中什么意思,php前戏
  • # 计算机视觉入门
  • #laravel 通过手动安装依赖PHPExcel#
  • (+4)2.2UML建模图
  • (¥1011)-(一千零一拾一元整)输出
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (十五)使用Nexus创建Maven私服
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)大型网站架构演变和知识体系
  • .NET Core引入性能分析引导优化
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .skip() 和 .only() 的使用
  • @ConditionalOnProperty注解使用说明
  • [@Controller]4 详解@ModelAttribute
  • [30期] 我的学习方法
  • [android] 切换界面的通用处理
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BT]BUUCTF刷题第8天(3.26)
  • [C++]Leetcode17电话号码的字母组合
  • [codevs 1296] 营业额统计
  • [Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图
  • [Linux] CE知识随笔含Ansible、防火墙、VIM、其他服务
  • [Linux] LVS+Keepalived高可用集群部署
  • [Linux打怪升级之路]-信号的保存和递达