PHP验证子串存在奇怪的规则

时间:2016-05-29 16:12:20

标签: php regex validation

我试图在PHP中验证我的输入,如何检查UTF8中以下有效格式的字符串中是否存在@ 用户名

有效:

  • " Hello @ username"
  • "你好@用户名"
  • "你好@username你好吗?"

无效

  • " Hello username"
  • "您好@usernamehow是吗?"

以下代码有效,但声称" @ usernamehow"在搜索" @ username"

时有效
Button

2 个答案:

答案 0 :(得分:1)

我认为你基本上会问how to check if a word is present within a string with PHP。这可以通过使用REGEX作为rock321987建议,或使用strpos()

来完成
$word = " @username ";
$string = "Hello @username how are you?";

if (strpos($string, $word) !== false) {
    die('Found it');
}

我发现Laravel正在使用完全相同的方法:

/**
 * Determine if a given string contains a given substring.
 *
 * @param  string  $haystack
 * @param  string|array  $needles
 * @return bool
 */
function str_contains($haystack, $needles)
{
    foreach ((array) $needles as $needle)
    {
        if ($needle != '' && strpos($haystack, $needle) !== false) return true;
    }
    return false;
}

希望这有帮助。

答案 1 :(得分:1)

为了匹配您提到的特定模式,您可以使用带有单边字边界的简单正则表达式:

$pattern = '/@username\b/';
$userMentioned = preg_match($pattern, $testString);

这将确保右侧没有其他字母或数字,但允许在左侧。