Php 通过正则表达式接受Unicode字符和下划线

Php 通过正则表达式接受Unicode字符和下划线,php,regex,Php,Regex,上面这一行在PHP中使用 if(preg_match('@^([^\W_]*\s){0,3}[^\W_]*$@', $_POST['txt_username_reg'])) . . . 正则表达式允许“英文字符+数字+最多3个空格” 我如何允许以下情况: 4下划线表示最大和Unicode字符数(仅限不允许使用特殊字符-放弃括号内的请求) \W将与标准ASCII英文字符匹配,我以前对此做过研究,直到现在才找到解决方案 我通常会建议匹配单词的分隔符(或边界),并禁止任何不需要的字符 不管有多少

上面这一行在PHP中使用

if(preg_match('@^([^\W_]*\s){0,3}[^\W_]*$@', $_POST['txt_username_reg'])) 
. . .
正则表达式允许“英文字符+数字+最多3个空格”

我如何允许以下情况:

  • 4下划线表示最大和Unicode字符数(仅限不允许使用特殊字符-放弃括号内的请求)

\W将与标准ASCII英文字符匹配,我以前对此做过研究,直到现在才找到解决方案

我通常会建议匹配单词的分隔符(或边界),并禁止任何不需要的字符

不管有多少不同的方法, 查看这些链接以了解更多信息


  • \p{L}
    匹配任何Unicode字母。所以

    '@^([^\W_]*\s){0,3}[^\W_]*$@'
    

    实现您的需求。但是,目前这些要求允许将
    \uuuuu
    作为密码,因此您可能需要重新考虑这些要求。

    您错了。您可以使用比
    [\pL\p{Nl}\p{Nd}\pM\p{Pc}]
    更复杂的东西来实现
    \w
    。另外,如果您在构建时链接到PHP时正确构建了PCRE库,
    \w
    将已经匹配这些库;这是一个建立的东西。试试正则表达式中的
    (*UCP)
    。谢谢你让我知道,在找到那些链接后,我愚蠢地保留了第一段,甚至没有检查。我已经更正了我的答案。你对这个问题没有充分的定义。“国际语言字符”到底是什么?@tchrist international language character意味着一种国际语言的字符。@Mario:Bah!你不懂理性,也不懂英语吗?存在以下类型的字符:字母、数字、标记、符号、标点符号、分隔符和其他。当你说性格时,你是指其中的一个还是全部?你说的语言是什么意思?我们只知道文字的名称,如拉丁语、希腊语、阿拉伯语等,而不知道语言的名称。什么是国际性的?在多个国家使用?天哪,这就缩小了很多范围。你自称是程序员?不相信@tchrist我不认为成为程序员需要成为语言和脚本方面的专家。所以我能说四种语言(其中三种流利)也算不上对吧?我真的很抱歉我愚蠢的回答,但我不知道你需要那么多的细节,以了解一些我们都已经做了。
    if(preg_match('/^(?:\p{L}*_){1,4}\p{L}*$/u', $_POST['txt_username_reg']))