我正在try 基于以下三个条件验证字符串

  1. 它必须包含一个字符串
  2. 它不应包含除.-之外的任何特殊字符.
  3. 数字是允许的,但不是必需的

我在Hit and Trial的帮助下形成了这个正则表达式^(?=.*[a-zA-Z])[a-zA-Z0-9\.\- ]*$.它可以在所有可供测试的在线工具中使用.但是我不能在代码中使用它

package main

import (
    "fmt"
    "regexp"
)

func main() {
    rule := regexp.MustCompile(`^(?=.*[a-zA-Z])[a-zA-Z0-9\.\- ]*$`).MatchString
    fmt.Println(rule("test_string"))
}

错误显示

panic: regexp: Compile(`^(?=.*[a-zA-Z])[a-zA-Z0-9\.\- ]*$`): error parsing regexp: invalid or unsupported Perl syntax: `(?=`

即使它在其他在线工具中也可以使用.我怎么才能解决这个问题呢?

推荐答案

Go不支持查找断言,但您可以通过匹配允许的字符来省略查找.

您可以在可选地匹配任何允许的字符之间匹配单个字符A-Za-z.

^[0-9. -]*[a-zA-Z][a-zA-Z0-9. -]*$

Explanation

  • ^字符串开头
  • [0-9. -]*可 Select 匹配任何不带a-za-Z的允许字符
  • [a-zA-Z]匹配单个字符a-Za-Z
  • [a-zA-Z0-9. -]*可以 Select 匹配所有允许的字符中的任何一个
  • $字符串尾

Regex demo

package main

import (
    "fmt"
    "regexp"
)

func main() {
    rule := regexp.MustCompile(`^[0-9. -]*[a-zA-Z][a-zA-Z0-9. -]*$`).MatchString
    fmt.Println(rule("test_string"))
    fmt.Println(rule("this is a test"))
}

输出

false
true

Go相关问答推荐

无法找到与golang、nginx和postquist进行的docker-compose./主要

mockgen不创建模拟

Hugo错误:没有为此项目配置现有内容目录

该文件位于模块.内,该模块不包含在您的工作区中

如何忽略打印达到最大深度限制 go colly

正确的 shell 程序进入 golang alpine docker 容器的入口点?

是否可以在调试期间在 VSCode 中预览 github.com/shopspring/decimal 值?

Golang 中的泛型类型转换

AddE 上的 Apache Tinkerpop gremlin-go 驱动程序 Next() 返回E0903:没有剩余结果

Golang 通过接口反映/迭代{}

Golang 构建多平台问题

来自洪流公告的奇怪同行字段

在 Gorm 的 AfterFind() 钩子中获取智能 Select struct 的值

在 GORM 中,如何在特定时区配置 autoCreateTime 和 autoUpdateTime?

无法建立连接,因为目标机器主动拒绝它 Golang

如何在gin中获取参数值数组

如何在 Windows 上使用 cgo 为 386 arch 构建 lib?

无法识别同步错误.使用一次

Go:如何通过 GIN-Router 从 AWS S3 将文件作为二进制流发送到浏览器?

如何访问 Go 模板中数组的第一个索引的值