2016-12-10 24 views
2

文字列に特定の単語が含まれているかどうかを確認する必要がありますが、その間に空白(スペース、タブなど)があることを覚えておいてください。PHP - 空白を含むstrpos

$array1 = "name @mail lastname"; 
$array2 = "name @ mail lastname"; 
$array3 = "name @  mail lastname"; 
$array4 = "name @ word mail lastname"; 

if (strpos($array1, '@mail') !== false) { 
echo 'true'; 
} 

したがって、array1、array2、array3の出力結果は真です。これを行う適切な方法は何ですか?両方の部分が文字列である

+0

は、文字列が「@」と「メール」のコンテンションが別個のコンテンションであるかどうかを確認すると問題になりますか? –

+0

間違いはありません。@mail(空白の有無にかかわらず)が真であるかぎり、間に単語がある場合や、記号やメールが全くない場合はfalseです。 – codexy

答えて

3

チェック:もちろん

if (strpos($array1, 'mail') !== false && strpos($array1, '@') !== false) { 
    echo 'true'; 
} 

これは'aaaaa mail bbbb @ ccc'のような文字列のために真であることができます。 だから、あなたが拡張できます。

$at_pos = strpos($array1, '@'); 
$mail_pos = strpos($array1, 'mail'); 
if ($at_pos !== false && $mail_pos !== false && $at_pos < $mail_pos) { 
    echo 'true'; 
} 

をそれ以外の場合は、正規表現を使用する時間です:

if (preg_match('/@\s*mail/', $str)) { 
    echo 'true'; 
} 
+0

oh commonおとこ ! –

+0

これはarray4の場合にも当てはまります – codexy

+0

その後、私の最後の例であるregexpを使用してください。 –

2

あなたは、この正規表現を使用することができます。/@\s*mail/

コード:希望

<?php 

$array1 = "name @mail lastname"; 
$array2 = "name @ mail lastname"; 
$array3 = "name @  mail lastname"; 
$array4 = "name @ word mail lastname"; 

$pattern = '/@\s*mail/'; 

echo preg_match($pattern, $array1); 
echo preg_match($pattern, $array2); 
echo preg_match($pattern, $array3); 
echo preg_match($pattern, $array4); 

出力:

1110

すべての入力は$array4から離れています。

+0

ありがとうございます。私は両方の答えを受け入れることができない、u_mulderが最初であったので、私はあなたのことを賞賛した。 – codexy

関連する問題