如何匹配包含unicode字符的完整字符串?
How to match a complete string containing unicode characters?
我想验证一个字符串,例如姓名。没有空格的字符串。对于普通的 Ascii,以下正则表达式就足够了 "^\w+$",其中 ^ 和 $ 考虑了整个字符串。我尝试使用 \pL 字符 class 为支持多种语言的 unicode 字符实现相同的结果。但由于某种原因 $ 不能帮助匹配字符串的结尾。我究竟做错了什么?
代码示例在这里:https://play.golang.org/p/SPDEbWmqx0N
我从以下位置复制粘贴的随机字符:http://www.columbia.edu/~fdc/utf8/
go版本go1.12.5darwin/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。
详情
^
- 字符串开头
[
- 匹配的字符 class 的开头
\p{L}
- 任何 BMP 字母
\p{M}
- 任何变音符号
]+
- 字符结束class,重复1+次
$
- 字符串结尾。
如果您打算像 \w
一样匹配数字和 _
,请将它们添加到字符 class、^[\p{L}\p{M}0-9_]+$
或 ^[\p{L}\p{M}\p{N}_]+$
。
我想验证一个字符串,例如姓名。没有空格的字符串。对于普通的 Ascii,以下正则表达式就足够了 "^\w+$",其中 ^ 和 $ 考虑了整个字符串。我尝试使用 \pL 字符 class 为支持多种语言的 unicode 字符实现相同的结果。但由于某种原因 $ 不能帮助匹配字符串的结尾。我究竟做错了什么?
代码示例在这里:https://play.golang.org/p/SPDEbWmqx0N
我从以下位置复制粘贴的随机字符:http://www.columbia.edu/~fdc/utf8/
go版本go1.12.5darwin/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。
详情
^
- 字符串开头[
- 匹配的字符 class 的开头\p{L}
- 任何 BMP 字母\p{M}
- 任何变音符号
]+
- 字符结束class,重复1+次$
- 字符串结尾。
如果您打算像 \w
一样匹配数字和 _
,请将它们添加到字符 class、^[\p{L}\p{M}0-9_]+$
或 ^[\p{L}\p{M}\p{N}_]+$
。