我想验证一个字符串,例如名称。没有空格的字符串。对于普通的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>
答案 0 :(得分:2)
您可以使用
^[\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}_]+$
中。