0

通常はサイト名の形式またはデバイスの MAC アドレスを使用して、ユーザーが検索クエリを送信できるようにするスクリプトがあります。検索をできるだけシンプルに保ちたいので、検索フィールドは 1 つだけにして、ユーザーが検索対象を指定するための選択フィールドやラジオ ボタンで混乱させたくありません。バックエンドで自動的に処理したい。

これらの形式のいずれかで、サイト名が検索されることを期待する方法は次のとおりです。

文字と数字は単なる例であり、この形式であれば何でもかまいません。

TX-DAL0099A1
TX-DAL0099A
TX-DAL0099
DAL0099A1
DAL0099A
DAL0099

または MAC アドレスによる

00 11 22 33 44 55
00:11:22:33:44:55
00.11.22.33.44.55
00-11-22-33-44-55
001122334455

最初にサイト名 (最初の例) であるかどうかを確認し、そうでない場合は MAC アドレスであることを確認する最善の方法を探しています。検索クエリで preg_replace 関数を実行して、ハイフン、ピリオド、コロンなどのその他の文字を削除したくありません。実際にサイト名の TX- 部分をプレフィックスとして付けることが重要であるためです。検索されているサイト名。

注: サイト名にプレフィックスが含まれているかどうか、および例の末尾に A/A1 があるかどうかを確認する必要があります。それらは重要です。

それが理にかなっていることを願っています。=/

ああ、私はこれを PHP で行っています - それについて言及するのを忘れていました。

更新: このコード スニペットは機能しますか?

if(preg_match("/^([0-9A-F]{2}[:-\s]?){5}([0-9A-F]{2})$/", $input)) {
    // SEARCH IS A MAC ADDRESS
}
else if((($query = $mysqli->query("SELECT * FROM `table` WHERE `site` LIKE '%$input%'")) !== false) && $query->num_rows() > 0) {
    // SEARCH IS A SITE AND FOUND ROW IN DATABASE
}
else {
    // NEITHER SITE NOR MAC, OR COULDN'T BE FOUND
}
4

3 に答える 3

4

ここに役立つはずのいくつかのスニペットがあります。

MAC アドレスがあるかどうかを確認します (正規表現パターンはWhat is a regular expression for a MAC Address?から取得 (および微調整) されています)。

if(preg_match("/^([0-9A-F]{2}[:-\s]?){5}([0-9A-F]{2})$/", $input)) {
   // We have a MAC address
}

入力にダッシュ (プレフィックスを示す) があるかどうかと、それが何であるかを確認します。

$siteNamePieces = explode("-",$input);
if(count($siteNamePieces) >= 2) {
   // Site name has a prefix, and it is $siteNamePieces[0]
}

A または A1 で終わるかどうかを確認します。

if(substr($input, -1) == "A") {
   // Ends in A
} else if(substr($input, -2) == "A1") {
   // Ends in A1
}

これらは、探しているさまざまなタイプのエンディングに基づいて調整する必要があると思います。ダッシュが表示されても必ずしもプレフィックスであるとは限らないかどうかなどです。プレフィックスとエンディングを外して取得する必要があると思います。クエリ用のコア サイト名の値。

扱っているデータの種類 (MAC アドレス、サイト名) がわかれば、データベースに適切にクエリを実行できます。

うまくいけば、これらがあなたを正しい方向に動かしてくれるでしょう!

于 2013-03-29T04:43:27.103 に答える
2

以下の SQL クエリは、site が入力に類似している行、または mac が正確に入力である行を検索します。

SELECT * FROM `table` WHERE `site` LIKE '%$input%' OR `mac` = '$input';
于 2013-03-29T04:45:45.483 に答える
0

variable1 ==== varaible2 で試すことができます

文字列には3つの等号があるため、文字列とデータ型を比較します。それ以外の場合は、値のみを比較します

于 2013-03-29T06:49:02.170 に答える