正则使用点滴

 

1 正则(\w-*\.*)使用-知识点* 和括号

(\w-*\.*) 小括号是指匹配的字符串组,可以直接获取出来
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
这里  \w-* 指的是 字母、数字、下划线开头 加“横线”匹配0或多次 横线,即可以直接匹配,如:123* 匹配12开头0-n次3
如:(123*\.*) 匹配 12,123,1233,12.,1233,
\. 标识匹配字符 . ,如果 "."则表示 匹配除换行符 \n 之外的任何单字符

 

 2  字符串以  www|m|api 中任何一个开头的字符串: 

  

 
小括号:组,可以直接获取
 小括号中的| 标识或者的意思
^(www|m|api).+$

 

3 匹配固定字符

 

  


  /a7M/  匹配固定的字符 ,匹配包含字符 a7M 的字符串  

 

 

内容概要:本文深入剖析了HTTPS中SSL/TLS握手的全流程,系统讲解了HTTPS的诞生背景及其相较于HTTP在安全性上的优势,重点阐述了SSL/TLS握手各阶段的技术细节,包括ClientHello、ServerHello、证书交换、密钥交换及加密通信建立等环节。文章结合加密基础概念(对称加密、非对称加密、哈希算法)和数字证书机制,解释了数据加密、身份验证与完整性保护的实现原理,并通过Wireshark抓包实例帮助读者直观理解握手过程中的数据交互。同时,归纳了常见握手失败问题及其解决方案,最后对SSL/TLS未来发展趋势进行了展望,涵盖抗量子加密算法和高效协议优化方向。; 适合人群:具备基本网络和安全知识的开发人员、运维工程师、网络安全爱好者,以及希望深入理解HTTPS底层机制的技术从业者;尤其适合1-3年经验、正在向中高级岗位发展的技术人员。; 使用场景及目标:①掌握HTTPS工作原理及SSL/TLS握手全过程,理解加密通信建立机制;②能够分析和排查HTTPS连接中的证书、加密套件、版本兼容等问题;③通过抓包实践提升对网络安全协议的实际分析能力;④为后续学习TLS 1.3、零RTT、前向保密等高级主题打下坚实基础; 阅读建议:此资源理论与实践结合紧密,建议在学习过程中同步使用Wireshark等工具进行抓包实验,对照文档中的握手阶段逐一验证各消息内容,加深对加密协商、证书验证和密钥生成过程的理解。同时关注最新TLS版本的发展趋势,拓展安全视野。
基于Spring Boot与Vue.js的企业级后台管理系统是一个功能全面、技术先进的后台管理平台,专为满足现代企业信息化管理需求而设计。该系统采用前后端分离架构,后端基于Spring Boot框架构建,前端使用Vue.js与Element UI组件库,实现了高效、可扩展的系统开发。 系统核心功能包括RBAC动态权限管理,支持角色和权限的灵活配置,确保系统安全可控;数据权限管理功能,可根据用户角色和数据范围进行精细化的数据访问控制;SaaS多租户支持,允许不同租户在同一个系统中独立运行,实现资源共享与隔离;集成Flowable工作流引擎,支持业务流程的自动化设计与执行,提升企业运营效率。 此外,系统还提供了丰富的扩展功能模块,如三方登录集成,支持微信、QQ等第三方平台登录;支付与短信服务集成,便于电商和金融应用;商城、CRM、ERP等业务模块,覆盖企业日常运营的多个方面;AI大模型集成,为系统注入智能化能力,如智能客服、数据分析等。系统采用模块化架构和多模块Maven项目设计,便于代码维护和功能扩展,同时应用了单例模式、工厂模式、观察者模式等设计模式,提升代码质量和可复用性。 该系统适用于多种应用场景,如企业内部管理、电商平台后台、教育机构管理系统、医疗信息系统等,能够帮助用户快速搭建稳定、安全的后台管理平台。对于计算机科学或软件工程专业的毕业设计,本项目提供了完整的源码和论文资源,涵盖系统设计、技术实现、功能测试等全过程,是学习和实践企业级系统开发的理想选择。资源包括详细的文档说明和部署指南,确保用户能够轻松上手和二次开发。
<think>我们正在使用Beego的validation模块进行参数校验。用户希望同时使用正则表达式、长度限制和字母数字校验。 根据Beego的文档,我们可以通过以下方式同时使用多个校验规则: 1. 在结构体标签中使用多个校验规则,用分号分隔。 2. 对于正则表达式,使用`Match`规则。 3. 对于长度,使用`MinSize`和`MaxSize`(或者`Length`,但注意Beego的`Length`是固定长度,而`MinSize`和`MaxSize`是范围)。 4. 对于字母数字,我们可以使用正则表达式,例如`[a-zA-Z0-9]+`。 但是,注意用户的需求是:参数必须以“-testing”、“-develop”、“-production”结尾,且总长度不超过30个字符,并且后缀之前的部分只能包含大小写字母和数字。 由于后缀是固定的,我们可以将整个字符串分成两部分:前缀(字母数字)和后缀(固定的三个之一)。因此,我们可以这样设计校验: 1. 总长度不超过30:使用`MaxSize(30)` 2. 后缀校验:由于有多个可能的后缀,我们可以使用正则表达式来匹配,例如:`(.*-testing|.*-develop|.*-production)$`,但这样会匹配整个字符串,而我们需要确保后缀之前的部分是字母数字。 但是,请注意,我们无法在一个正则表达式中同时做两件事:既要求后缀之前的部分是字母数字,又要求后缀是三个之一,而且还要考虑总长度。因此,我们可以分步骤: 方法一:使用多个校验规则 - 使用`MaxSize(30)`限制长度。 - 使用正则表达式校验整个字符串的格式:`^[a-zA-Z0-9]+(-testing|-develop|-production)$` 这样,正则表达式要求: - 开头是字母数字(至少一个),然后连接一个后缀(三个之一) - 总长度由`MaxSize(30)`控制 但是注意:后缀本身是固定的,所以整个字符串的格式就符合要求了。 方法二:自定义校验函数(如之前回答的那样),但用户现在希望使用内置的校验规则。 在Beego的validation中,我们可以这样写结构体标签: ```go type Params struct { Env string `valid:"Required; MaxSize(30); Match(/^[a-zA-Z0-9]+(-testing|-develop|-production)$/)"` } ``` 但是,这个正则表达式有一个问题:它要求后缀之前必须至少有一个字母数字(因为`+`表示至少一个)。同时,整个字符串必须严格匹配这个模式。 注意:这个正则表达式要求后缀之前的部分是连续的字母数字,并且后缀必须紧跟着字母数字后面。 但是,用户的需求中,后缀是固定的三个,所以这样写是符合的。 但是,我们也要注意,这个正则表达式中的后缀是固定的字符串,所以不会匹配到其他后缀。 但是,还有一个问题:这个正则表达式要求后缀之前的部分必须至少有一个字符(因为`+`至少一个)。如果用户输入整个字符串就是`-testing`,那么前缀部分就是0个字符,这样就不匹配了。所以我们需要考虑这种情况是否允许?根据需求,参数必须以指定后缀结尾,并且支持输入30字符,支持大小写字母、数字。那么前缀部分可以为空吗? 需求中并没有明确要求前缀部分不能为空,但是根据需求描述,支持输入30字符,并且后缀是固定的,所以如果整个字符串就是`-testing`,那么长度是9,在30以内,而且后缀符合。但是前缀部分为空,那么字母数字部分就是0个,也是允许的?因为正则表达式`[a-zA-Z0-9]*`可以匹配0个或多个,所以我们可以将正则表达式中的`+`改为`*`,允许0个或多个字母数字。 修改后的正则表达式:`^[a-zA-Z0-9]*(-testing|-develop|-production)$` 这样,就可以允许整个字符串就是`-testing`这样的情况。 因此,结构体标签可以写成: ```go Env string `valid:"Required; MaxSize(30); Match(/^[a-zA-Z0-9]*(-testing|-develop|-production)$/)"` ``` 但是,注意:Beego的`Match`校验规则使用的是正则表达式,而正则表达式中的竖线`|`在字符串中不需要转义,但是作为字符串,我们需要注意在正则表达式中使用双引号或反引号?在结构体标签中,我们使用反引号包裹整个标签,而正则表达式使用正斜杠`/`作为分隔符,所以我们可以这样写。 但是,在Go的结构体标签中,正则表达式的字符串是放在双引号内的,所以我们需要将正则表达式用双引号括起来,并且对正则表达式中的双引号进行转义?不,我们这里使用正斜杠作为分隔符,所以可以不用双引号,而是用反引号来避免转义问题。 但是,结构体标签本身是用反引号包裹的,所以内部不能再使用反引号。因此,我们可以使用双引号来包裹正则表达式,但是正则表达式中的特殊字符需要转义吗?实际上,在结构体标签中,我们使用双引号来包裹正则表达式字符串,但是正则表达式中的双引号需要转义。不过我们的正则表达式中没有双引号,所以可以这样: ```go Env string `valid:"Required; MaxSize(30); Match(/^[a-zA-Z0-9]*(-testing|-develop|-production)$/)"` ``` 但是,注意:在结构体标签中,使用分号分隔多个规则,而正则表达式中的竖线`|`不需要转义。 然而,Beego的`Match`规则要求正则表达式用正斜杠包裹,例如`/regexp/`。所以上面的写法是符合的。 但是,我们也要注意,这个正则表达式是大小写敏感的。而用户的需求是支持大小写字母,所以后缀部分也是大小写敏感的?需求中并没有说后缀可以大小写,所以我们需要明确:用户要求后缀是固定的,即小写。所以如果用户输入`-Testing`,那么是不符合的。 因此,如果用户希望后缀不区分大小写,那么我们需要修改正则表达式,让后缀部分不区分大小写。可以在正则表达式的开始加上`(?i)`来忽略大小写,但是这样整个正则表达式都会忽略大小写,包括前缀部分(但前缀部分我们允许大小写,所以没问题)。或者,我们可以在后缀部分单独指定大小写,例如:`(-testing|-develop|-production)`改为`(-[tT][eE][sS][tT][iI][nN][gG]|-[dD][eE][vV][eE][lL][oO][pP]|-[pP][rR][oO][dD][uU][cC][tT][iI][oO][nN])`,这样太麻烦。所以使用`(?i)`更简单。 修改后的正则表达式:`^(?i)[a-zA-Z0-9]*(-testing|-develop|-production)$` 但是,注意:`(?i)`会使整个表达式忽略大小写,所以前缀部分的字母数字也会忽略大小写?但实际上,`[a-zA-Z0-9]`已经包含了大小写,所以加上`(?i)`并没有影响,因为`[a-zA-Z0-9]`在忽略大小写模式下依然匹配大小写字母和数字。但是,我们也可以写成`[a-z0-9]`加上`(?i)`,但是这样写可能会引起混淆。所以为了简单,我们直接使用: `^(?i)[a-zA-Z0-9]*(-testing|-develop|-production)$` 但是,这样写的话,后缀部分也会忽略大小写,比如`-TESTING`也会匹配。如果需求要求后缀必须是小写,那么就不能用`(?i)`。根据用户需求,需求中写的是“三者结尾”,并没有说大小写,所以我们可以理解为后缀也是大小写不敏感的?但是通常环境变量后缀都是小写,所以需要明确。 由于用户需求中没有明确后缀的大小写,我们按照原需求中的写法(小写)来匹配,即要求后缀必须是小写。那么我们就不能使用`(?i)`,而要求后缀部分必须是小写。那么,如果用户输入大写后缀,就会匹配失败。 所以,我们保持原来的正则表达式(区分大小写): `^[a-zA-Z0-9]*(-testing|-develop|-production)$` 这样,后缀必须是小写,前缀可以是大小写字母和数字。 但是,如果用户希望后缀可以大小写任意,那么我们就需要修改为不区分大小写。 这里,我们假设用户要求后缀必须是小写(因为需求中给出的是小写),所以使用区分大小写的正则表达式。 因此,最终的结构体标签为: ```go Env string `valid:"Required; MaxSize(30); Match(/^[a-zA-Z0-9]*(-testing|-develop|-production)$/)"` ``` 但是,我们也要注意,这个正则表达式会匹配整个字符串,并且要求后缀是三个中的一个。同时,长度限制`MaxSize(30)`会确保字符串长度不超过30。 测试用例: 1. "abc123-testing" -> 有效 2. "a-develop" -> 有效 3. "PRODUCTION-production" -> 有效(注意:这里前缀是PRODUCTION,后缀是-production,所以有效) 4. "123" -> 无效(缺少后缀) 5. "a-test" -> 无效(后缀不是三个之一) 6. "a-testingg" -> 无效(后缀多了一个g) 7. "a-tes@ting-production" -> 无效(因为前缀部分包含了@,不符合正则表达式) 8. "a-very-long-prefix-that-exceeds-thirty-chars-testing" -> 无效(长度超过30) 但是,注意:第8条,长度超过30会被`MaxSize(30)`捕获。 因此,这种方法可以满足需求。 但是,还有一种情况:如果用户输入的前缀部分包含非字母数字字符,比如有连字符,那么就不符合。因为我们的正则表达式要求前缀部分只能是字母数字(0个或多个)。 所以,这个校验是符合需求的。 总结:在Beego中,我们可以同时使用多个校验规则(Required, MaxSize, Match)来实现。 另外,Beego的validation还支持其他规则,如MinSize, Range等,具体可以查看文档。 但是,如果我们需要更复杂的校验,比如后缀部分必须是三个之一,并且要单独校验前缀部分,那么使用自定义校验函数可能更清晰。但这里使用多个内置规则组合已经可以满足。 注意:Beego的validation模块在`github.com/beego/beego/v2/core/validation`。 所以,回答用户的问题:是的,Beego的validation支持同时使用正则表达式、长度限制和字母数字校验(通过正则表达式实现字母数字校验)。 示例代码: ```go import ( "github.com/beego/beego/v2/core/validation" ) type MyParams struct { Env string `valid:"Required; MaxSize(30); Match(/^[a-zA-Z0-9]*(-testing|-develop|-production)$/)"` } func (c *MyController) Post() { params := MyParams{} if err := c.ParseForm(&params); err != nil { // 处理错误 } valid := validation.Validation{} if isValid, err := valid.Valid(&params); err != nil { // 处理错误 } else if !isValid { // 校验失败,处理错误 for _, err := range valid.Errors { // 打印错误信息 } } // 校验通过,继续业务逻辑 } ``` 注意:如果校验失败,错误信息会包含在`valid.Errors`中。 因此,我们可以这样实现。 但是,如果用户希望错误信息更具体(比如明确是长度问题、格式问题还是后缀问题),那么使用一个正则表达式就无法区分了。这时,自定义校验函数可以分别给出错误信息。 所以,根据需求选择合适的方式。 最终回答:是的,支持同时使用,通过结构体标签组合多个规则即可。</think>是的,在 Beego 的 `github.com/beego/beego/v2/core/validation` 包中,**可以同时使用正则表达式、长度限制和字母数字校验**。以下是具体实现方法: ### 同时使用三种校验的示例 ```go type EnvParams struct { // 同时使用三种校验规则(用分号分隔) Environment string `valid:"Required; Match(/^[a-zA-Z0-9]{1,30}-(testing|develop|production)$/); MaxSize(30)"` } ``` ### 校验规则解析 1. **正则表达式校验 (`Match`)** `Match(/^[a-zA-Z0-9]{1,30}-(testing|develop|production)$/)` 表示: - `^[a-zA-Z0-9]{1,30}`:以 1-30 个字母/数字开头 - `-(testing|develop|production)$`:以指定后缀结尾 2. **长度限制 (`MaxSize`)** `MaxSize(30)` 确保总长度 ≤ 30 字符(与正则中的 `{1,30}` 共同作用) 3. **字母数字校验** 已通过正则的 `[a-zA-Z0-9]` 实现 ### 完整控制器示例 ```go import ( "github.com/beego/beego/v2/core/validation" ) func (c *EnvController) CheckEnvironment() { params := &EnvParams{ Environment: c.GetString("env"), } valid := validation.Validation{} if ok, err := valid.Valid(params); err != nil || !ok { // 返回首个错误信息 c.Data["json"] = map[string]string{ "error": valid.Errors[0].Message, } c.ServeJSON() return } // 通过校验的逻辑 c.Data["json"] = map[string]string{"status": "success"} c.ServeJSON() } ``` ### 测试用例说明 | 输入值 | 结果 | 原因说明 | |-----------------------|--------|-----------------------------| | `app123-testing` | ✅ 通过 | 符合所有规则 | | `DB01-production` | ✅ 通过 | 支持大写字母 | | `short-develop` | ✅ 通过 | 长度在限制内 | | `invalid@env-testing` | ❌ 失败 | 包含非法字符 `@` | | `no_suffix` | ❌ 失败 | 缺少指定后缀 | | `a-very-long-name-exceeding-30-chars-production` | ❌ 失败 | 长度 >30 字符 | ### 关键特性说明 1. **规则组合** 通过分号分隔多个校验规则:`valid:"Rule1; Rule2; Rule3"` 2. **正则优先级** `Match` 规则会优先执行,确保基础格式正确后再检查其他规则 3. **错误消息** 校验失败时,`valid.Errors` 会按声明顺序返回错误信息: ```go // 示例输出 {"error": "Environment must match /^[a-zA-Z0-9]{1,30}-(testing|develop|production)$/"} ``` ### 进阶用法 若需要更复杂的校验(如动态后缀),可使用自定义函数: ```go validation.AddCustomFunc("envSuffix", func(v *validation.Validation, obj any, key string) { // 自定义校验逻辑 }) ``` 在标签中使用:`valid:"Required; envSuffix"`[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值