登录
首页 >  Golang >  Go问答

对正则表达式进行Go Validator v2转义

来源:stackoverflow

时间:2024-03-09 11:57:24 338浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《对正则表达式进行Go Validator v2转义》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我目前正在使用 go validator.v2 (https://godoc.org/gopkg.in/validator.v2) 通过内置的正则表达式功能执行一些数据验证。给出的简单示例对我来说正确有效:

type newuserrequest struct {
    somestring string `validate:"min=3,max=40,regexp=^[a-za-z0-9]*$"`
}
nur := newuserrequest{somestring : "jamesbond"}

但是,当我开始向正则表达式引入复杂性时,例如允许需要转义(用于验证电子邮件或其他内容)的多个特殊字符(_-.),我开始遇到问题。如果我使用双斜杠 \\ 转义特殊字符,我会收到“未知标签”错误,或者如果我使用单斜杠 \,它只会跳过验证(任何字符串都会通过):

input string: "[email protected]"
regexp: `validate:"regexp=^[_a-za-z0-9\\-\\+]+(\\.[_a-za-z0-9\\-]+)*@[a-za-z0-9\\-]+(\\.[a-za-z0-9]+)*(\\.[a-za-z]{2,})$"`
expected result: pass - valid string
actual result/output: 'unknown tag' error
Input string: "06/06/2006"
regexp: `validate:"regexp=^[_A-Za-z0-9\-\+]+(\.[_A-Za-z0-9\-]+)*@[A-Za-z0-9\-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$"`
Expected result: Invalid string
Actual result/output: PASS - Validation passed/skipped.

还有其他人遇到类似问题或者可以提供一种使用 go validator.v2 正确转义正则表达式的方法吗?

任何指示将不胜感激。预先感谢您!


解决方案


请参阅 go-validator/validator "Escape commas in regex" bug description

您需要使用 2 个反斜杠转义逗号。

您可以像这样修复代码:

regexp: `validate:"regexp=^[_A-Za-z0-9+-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2\\,})$"`

请注意,当连字符位于字符类中的最终位置时,您不需要对其进行转义,并且 + 也不必在那里进行转义。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《对正则表达式进行Go Validator v2转义》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>