Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP验证子字符串存在且规则怪异_Php_Regex_Validation - Fatal编程技术网

PHP验证子字符串存在且规则怪异

PHP验证子字符串存在且规则怪异,php,regex,validation,Php,Regex,Validation,我试图验证我在PHP中的输入,如何检查字符串中是否存在以下UTF8中的有效格式的@username 有效: “你好@username” "Hello@username" “你好@username你好吗?” 无效 “你好用户名” “你好@username你好吗?” 以下代码有效,但在搜索“@username”时声称“@usernamehow”有效。 我想你基本上是在问。这可以按照rock321987的建议使用正则表达式,或者使用strpos(): 我发现Laravel使用了完全相同的方法:

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

有效:

  • “你好@username”
  • "Hello@username"
  • “你好@username你好吗?”
无效

  • “你好用户名”
  • “你好@username你好吗?”
以下代码有效,但在搜索“@username”时声称“@usernamehow”有效。


我想你基本上是在问。这可以按照rock321987的建议使用正则表达式,或者使用
strpos()

我发现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;
}

希望这有帮助。

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

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

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

您可以使用
preg_match(“/@username(?=\\s |$)/”,$username)
\b
在这里可能是错误的,因为它将匹配
@username+xyz
,而这可能不是OPwants@rock321987我不能这么说,但对于他提供的数据来说,这肯定是可行的。我可以看到允许和不允许的用例除非我们知道其中一种方法,否则最好不要过度设计解决方案。“吻”,以及所有这些:)
/**
 * 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;
}
$pattern = '/@username\b/';
$userMentioned = preg_match($pattern, $testString);