PHP 中的 RegEx 帮助

RegEx help in PHP

我真的在寻找我的问题的答案,但似乎找不到。如果我在这里创建一个副本,请原谅我。

我的问题是我正在创建一个脚本,我需要验证一个用户名,我意识到这必须使用正则表达式来完成;我吸进去了。

哪些用户名不能包含,如下:

! " # ¤ % & / ( ) = ? ` \ ´ ' ^ ~ ¨ § | @ £ $ € { [ ] }`

因此,究竟如何基于此创建正则表达式超出了我的技能范围。我还没有找到一个具有相同要求的 question/answer。伙计们,我很乐意帮助您创建此正则表达式。

$pattern = '/[^\!\¤\%\&\/\(\)\=\?\`\\^\~\¨\§\|\@\£$\€\{\[\]\}\"\']+/';
preg_match($pattern, "test test test");

应该可以解决问题。这实际上创建了一个白名单。它检查字符串中除这些字符以外的所有字符,但 ^ 对此负责。当字符串包含 normal 个字符时它应该 return 1,当字符串包含黑名单字符之一时它应该是 0。

要检查空格,请额外执行 preg_match。

$pattern = '/^[^ ]* [^ ]*$/';
preg_match($pattern, "test test test");  //should return 0.

您可以分两步完成,检查与此 preg_match_allpreg_quote(RegEx):
的任何匹配项 (将 return 匹配数)

$pattern = preg_quote("!\"#¤%&()=?`´'^~¨§|@£$€{[]}]");
preg_match_all("/[$pattern]/", $password);

然后计算密码中的空格: substr-count

int substr_count ($password , " ");

综合起来

$pattern = preg_quote("!\"#¤%&()=?`´'^~¨§|@£$€{[]}]","/");
if (!preg_match_all("/[$pattern]/", $password) and (substr_count ($password , " ") < 2)) {
    //Pasword is OK
    echo "Works!\n";
} else {
    //Password has issues
    echo "Does not work :( \n";
}

或者使用更有效的strpbrk(returns 是模式中第一个字符匹配后的字符串):

$pattern = "!\"#¤%&()=?`´'^~¨§|@£$€{[]}]";
if (!strpbrk($password,$pattern) and (substr_count ($password , " ") < 2)) {
    //Pasword is OK
    echo "Works!\n";
} else {
    //Password has issues
    echo "Does not work :( \n";
}   

卑尔根理查德祝你好运:D

尝试使用:

^(?:[\x{2D}\x{2E}\x{5F}\p{L}\p{N}]+)(?: (?:[\x{2D}\x{2E}\x{5F}\p{L}\p{N}]+))$

\x{2D} ...匹配字符-
\x{2E} ... 匹配字符 .
\x{5F} ... 匹配字符 _
\p{L} ... 匹配任何 Unicode 字母。
\p{N} ... 匹配任何 Unicode 数字。


if (preg_match('/^(?:[\x{2D}\x{2E}\x{5F}\p{L}\p{N}]+)(?: (?:[\x{2D}\x{2E}\x{5F}\p{L}\p{N}]+))$/usim', $subject)) {
    # Successful match
} else {
    # Match attempt failed
}