2016-05-29 2 views
1

PHPで入力を検証しようとしていますが、のユーザ名がUTF8の有効な形式の文字列に存在するかどうかをチェックする方法は?PHPが奇妙なルールでサブストリングを検証する

有効:

  • "こんにちは@username"
  • "こんにちは@ユーザー名"
  • "?こんにちは@usernameあなたをどのように"

無効

  • "こんにちはユーザー名"
  • "こんにちは@usernamehowあなたは?"

次のコードは動作しますが、クレーム "@usernamehowは、" "@ユーザー名"

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

'preg_match("/@ username(?= \\ s | $)/ "、$ username)' – rock321987

答えて

1

はあなたが言及し、特定のパターンに一致するには、あなたは、片側ワード境界で簡単な正規表現を使用することができます。

$pattern = '/@username\b/'; 
$userMentioned = preg_match($pattern, $testString); 
右側には、他の文字や数字がないことを確認します

が、それを左側に置くことができます。

+0

'\ b' _may_は' @ username + xyz'にマッチするのでここで間違っているかもしれません_may_ OPが望んでいるものではない – rock321987

+0

@ rock321987私はそれについて話すことはできませんが、彼が提示したデータのためには間違いなく機能します。私はそれを許すこととそうでないことの両方のユースケースを見ることができます。 - 私たちがどちらか一方の方法を知らない限り、ソリューションを過剰にエンジニアリングしないことをお勧めします。 "キス"、そしてそのすべて: – Atli

1

を検索するとき、私はあなたが基本的にhow to check if a word is present within a string with PHPを求めていると思います有効です。 rock321987、またはstrpos()を使用することによって示唆されているようにこれはREGEXを使用することによって行うことができる:

$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; 
} 

ホープ、このことができます。