2017-10-22 8 views
-2

私はフォームを介して来ている文字列を持っていますが、私は正規表現でそれをマッチする方法はわかりません。 :正規表現のデータ形式 "FirstName LastName、PhoneNumber、email"

FirstName LastName, PhoneNumber, Emailadress 

は、だから私は、この形式の場合、正規表現のみ一致文字列に使用するかを知りたいです。

データは、GETメソッドを使用して検索ページに送信されます。私は定期的なexpresionで文字列をチェックし、それが検索ページで進めばマッチします。ここ

ユーザーが検索ボックスに異なるデータを入力することができますし、それは常に私がデータや文字列は、フォーマット名姓、電話であるかどうかを確認する方法を知りたい、この形式ではありませんので...

は1です

http://localhost/search.php?q=Martha+Marquez%2C+0637460697%2C+Morbi.quis%40pellentesque.ca 

を確認する必要があり、これは私が正規表現に新たなんだ$ _GET

Martha Marquez, 0637460697, [email protected] 

からの生データで提供されたデータとURLの例。事前に おかげで

+2

なぜユーザーがそのような特定の形式を入力するのですか? 3つのフォームフィールドを使うのはなぜですか? – mario

+0

私はjavascriptライブラリのような先読みを使用しています。ユーザーが検索バーに名前を入力すると、自動的に候補が表示されます。提案はその形式(ファーストネームラストネーム、電話番号、電子メール)になっているので、ユーザーは探しているものをより簡単に見つけることができます。 名前を入力してEnterキーを押して検索することはできますが、候補が表示され、候補の1つを選択すると、その特定の形式でserch解析ページに送られます。なぜそれがその形式かどうかを知る必要があった理由 – Joksa

答えて

1

カンマで分割(+空白)とlist()を使って自分の価値観を展開します。

<?php 
$string = "FirstName LastName, PhoneNumber, Emailadress"; 
list($name, $phone, $email) = preg_split('~,\s*~', $string); 

echo $phone; 
?> 


が実際に 文字列が、指定されたフォーマットであることをを確保するために、あなたは

を使用することができます内訳
^(?P<name>[^,]+),\s*(?P<phone>[^,]+),\s*(?P<email>\[email protected]\S+)\s*$ 

これは言う:

^      # start of the string 
(?P<name>[^,]+),\s* # not a comma, 1+ -> group "name" 
(?P<phone>[^,]+),\s* # not a comma, 1+ -> group "phone" 
(?P<email>\[email protected]\S+)\s* # group "email" 
$      # end of the line 


なり PHP中:

<?php 
$string = "Martha Marquez, 0637460697, [email protected]"; 

$regex = '~^(?P<name>[^,]+),\s*(?P<phone>[^,]+),\s*(?P<email>\[email protected]\S+)\s*$~'; 

if (preg_match($regex, $string, $match)) { 
    print_r($match); 
} else { 
    echo "Wrong format."; 
} 
?> 
+1

各値をトリムすることを忘れないでください。電話番号は「PhoneNumber」になります。しかし、最も重要なのは、常にその価値を消毒するべきです!たとえば、firstnameが100よりも長くない文字列であることを確認してください。 – Cedric

+0

質問は具体的な文字列形式をアサートする*ので、盲目的な爆発はおそらく答えではありません。 ( 'explode' - PHPの苦境) – mario

+0

@mario:質問をもう一度読んで、「bla bla bla bla bla bla bla」という正規表現を提案したいと思います。 – Jan

0

BEFOREを共有し、AFTER GETメソッドを介して、このデータを提出することができます...

だけでURLが検索した後、どのように見えるかを確認します提出されました。

+1

これはコメントでなければなりません。答え: – Cedric

+1

「コメントするには50の評判が必要です」というルールのためコメントできません。それを答えとする。とにかく批判のおかげで... – Sayonara

+1

Janの答えに(私もそれについてコメントすることはできませんので...)これらの$ nameまたは$ phoneのいずれかがチェックされていることを忘れないでください$ emailは、list($ name、$ phone、$ email)= explode( '、'、$ string)の後にSETされます。 – Sayonara