gpt4 book ai didi

regex - 如何匹配包含unicode字符的完整字符串?

转载 作者:IT王子 更新时间:2023-10-29 02:00:31 26 4
gpt4 key购买 nike

我想验证一个字符串,例如姓名。没有空格的字符串。对于普通的 Ascii,以下正则表达式就足够了 "^\w+$",其中 ^ 和 $ 考虑了整个字符串。我尝试使用\pL 字符类为支持多种语言的 unicode 字符实现相同的结果。但由于某种原因 $ 不能帮助匹配字符串的结尾。我究竟做错了什么?

代码示例在这里:https://play.golang.org/p/SPDEbWmqx0N

我从以下位置复制粘贴的随机字符:http://www.columbia.edu/~fdc/utf8/

go版本go1.12.5 darwin/amd64

package main

import (
"fmt"
"regexp"
)

func main() {

// Unicode character class

fmt.Println(regexp.MatchString(`^\pL+$`, "testuser")) // expected true
fmt.Println(regexp.MatchString(`^\pL+$`, "user with space")) // expected false


// Hindi script
fmt.Println(regexp.MatchString(`^\pL+$`, "सकता")) // expected true doesn't match end of line

// Hindi script
fmt.Println(regexp.MatchString(`^\pL+`, "सकता")) // expected true

// Chinese
fmt.Println(regexp.MatchString(`^\pL+$`, "我能")) // expected true

//French
fmt.Println(regexp.MatchString(`^\pL+$`, "ægithaleshâtifs")) // expected true

}
actual result:
true <nil>
false <nil>
false <nil>
true <nil>
true <nil>
true <nil>

expected result:
true <nil>
false <nil>
true <nil>
true <nil>
true <nil>
true <nil>

最佳答案

你可以使用

^[\p{L}\p{M}]+$

参见 Go demo .

详情

  • ^ - 字符串的开始
  • [ - 匹配的字符类的开始
    • \p{L} - 任何 BMP 字母
    • \p{M} - 任何变音符号
  • ]+ - 字符类结束,重复1+次
  • $ - 字符串结尾。

如果您还打算像 \w 一样匹配数字和 _,请将它们添加到字符类中,^[\p{L}\p {M}0-9_]+$^[\p{L}\p{M}\p{N}_]+$

关于regex - 如何匹配包含unicode字符的完整字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57287887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com