【问题标题】:PHP Validate Substring Exists with Weird RulePHP验证子字符串是否存在奇怪的规则
【发布时间】:2016-09-27 11:37:41
【问题描述】:

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

有效:

  • “你好@用户名”
  • “你好@用户名”
  • “你好@username 你好吗?”

无效

  • “你好用户名”
  • “你好@username你好吗?”

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

$userMentioned = substr_count($text, $username);

【问题讨论】:

  • 你可以使用preg_match("/@username(?=\\s|$)/", $username)

标签: php regex validation


【解决方案1】:

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

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

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

【讨论】:

  • \b 可能在这里是错误的,因为它将匹配 @username+xyz 可能不是 OP 想要的
  • @rock321987 我不能这么说,但它肯定适用于他提供的数据。我可以看到允许和不允许的用例。 - 最好不要过度设计解决方案,除非我们知道其中一种方法。 “吻”,以及所有这些:)
【解决方案2】:

我想你基本上是在问how to check if a word is present within a string with PHP。这可以通过按照 rock321987 的建议使用 REGEX 来完成,或者使用 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;
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多