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