这是用户全名的正则表达式,所以我想允许空格。 另外,我使用以下正则表达式仅允许UTF-8字符:
/^(\p{L}+)$/u
然后我在这里看到一条帖子说我需要在角色类中添加空格,但这不起作用:
/^(\p{L} +)$/u
答案 0 :(得分:4)
根据接受全名和unicode(u)模式的正则表达式,尝试考虑这个正则表达式(兼容标准POSIX正则表达式,包括Python,JS和PHP正则表达式):
/^[\p{L}'\-\.]+( [\p{L}'\-\.]+)*$/u
因此,此正则表达式将通过以下方式进行分析:
[\p{L}'\-\.]+
[\p{L}'\-\.]+
( [\p{L}'\-\.]+)*
此正则表达式支持单个和多个单词的名称(也就是用户的全名)。如果要包含更多字符,请通过添加更多字符来修改[\p{L}'\-\.]
(特别是当需要重音字符时,例如ñ
。目前,它包括不同脚本中的字母字符以及撇号和连字符。
它在PHP或JS引擎中接受此类名称,您可以针对其他引擎测试它,显示某些引擎要求您手动添加这些字符或将其更改为\w
(可以验证测试{{3} }):
Johnny Appleseed
Martin Harding-Rolls
Daniel O'Brian
IJsbrand van 't IJsselstein
Euclid
Jalapeño Arriba
(您可能需要在列表中添加ñ)S.L.IJ.M.B.A.L P.U.I.S.T
Paul Erdős
(您可能需要在列表中添加匈牙利语重音字母)на русском
目前不接受这些名称:
Spaceman Superman
(名称前面的空格)OMG
(名字后的空格)Johnny Appleseed
(两个空格)-- '+
(不可接受的字符)Mulliganaceous2 Shogun
(数字,仅限\p{L}
)Pokemon Porygon2
(数字,仅限\p{L}
) 关于兼容性和\w
转义(编辑:提问者特别想要用数字排除名称)
如果\p{L}
不起作用,您可以尝试/^[\w'\-\.]+( [\w'\-\.]+)*$/u
。
\w
匹配所有ASCII字符,包括数字和下划线:[A-Za-z0-9_]
[\u4E00-\u9FFF]
[\w'\-\.&&[\D]]
表示所有单词,撇号,连字符和句点的字符类,但不是数字。答案 1 :(得分:2)
一种不同的方法,只允许字母之间的单个空格(pcre / php pattern)。
/^(?>\pL+ ?\b)+$/u
\pL+
匹配一个或多个unicode字母 ?
单个空格为optional \b
要求quantified group以字母结尾。^(?:\p{L}+ ?\b)+$
See demo at regex101 for testing
(此模式要求字符串以字母开头,以字母结尾)
答案 2 :(得分:0)
我认为这个正则表达式可以用于完整的用户名,
/^([a-zA-Z' ]+)$/
我认为你不应该把正则表达式放在一个名字上,因为将全世界所有的名字与外国字符和不同的语言相匹配是一项相当复杂的工作,并没有很多优势。
尝试包含外国字符
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.']+$/u