2013-03-29 4 views
0

J'ai un script qui permet à un utilisateur de soumettre une requête de recherche, généralement sous la forme d'un nom de site ou en utilisant l'adresse MAC d'un périphérique. Je veux garder la recherche aussi simple que possible, alors je veux seulement le champ de recherche, et je ne veux pas l'encombrer de champs ou de boutons radio pour que l'utilisateur spécifie ce qu'il recherche. Je veux prendre soin de cela automatiquement sur le back-end.Comment comparer ces types de chaînes?

Voici comment j'attends un nom du site à rechercher par, dans un de ces formats:

Les lettres et les chiffres ne sont que des exemples, peut être quelque chose, juste dans ce format.

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

OU par MAC Adresse

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 

Je cherche la meilleure façon de vérifier d'abord si elle est un nom du site (les premiers exemples), et sinon, assurez-vous qu'il est un Adresse Mac. Je ne veux pas exécuter une fonction preg_replace sur la requête de recherche pour supprimer des caractères divers, comme les traits d'union, les points, les deux-points, etc. car il est important d'avoir la partie TX préfixée du nom du site. un nom de site en cours de recherche.

Note: Je voudrais savoir si le nom du site a le préfixe, ainsi que la fin A/A1 des exemples. Ce sont importants.

J'espère que cela a du sens. =/

Oh, et je le fais en PHP - j'ai oublié de le mentionner.

MISE À JOUR: Cet extrait de code fonctionnerait-il?

+1

Soyez conscient de la fait que l'expression régulière ci-dessus acceptera également l'adresse mac suivante 0F-A0-FF: 86 DE 84, l'expression rationnelle donnée par pilcow sur http://stackoverflow.com/questions/4260467/what-is-a-regular-expression- for-a-mac-address devrait fonctionner mieux – bkwint

+0

Merci pour ce conseil, bkwint. – Skryn

Répondre

2

La requête SQL ci-dessous trouvera les lignes où le site est similaire à l'entrée, ou mac est exactement l'entrée.

SELECT * FROM `table` WHERE `site` LIKE '%$input%' OR `mac` = '$input'; 
+0

Ceci est une possibilité. Cependant, actuellement, mes données sont stockées dans des fichiers texte. Je migre lentement vers une base de données de base de données, mais il y a bien plus de 100 000 entrées à traiter, et je n'ai pas vraiment réussi à tout importer ... et tout ça. Mais, j'ai une question, si quelqu'un a cherché "TX-DAL0091A1" cela correspondra-t-il à une entrée qui est simplement "DAL0091" ou "DAL0091A" par exemple? Je suppose que c'est ce que fait le paramètre LIKE, mais je veux juste être sûr. Et puis je suppose que cela revient au MAC, si rien ne se trouve dans la recherche LIKE, non? Désolé pour les questions. – Skryn

+0

Eh bien oui, il va correspondre à DAL0091 et DAL0091A, les caractères en pourcentage définissent les parties floues. La requête va correspondre à tout ce qui ressemble à un site (comme ci-dessus), et tout ce qui est égal à l'mac. Il est possible que vous obteniez plusieurs réponses en retour avec la requête ci-dessus. –

+0

Merci! J'ai mis à jour ma question originale en utilisant vos exemples et ceux de jszobody pour mettre en place quelque chose qui pourrait marcher. Pourriez-vous vérifier s'il y a des problèmes potentiels? – Skryn

4

Voici quelques extraits qui devraient vous aider.

si nous avons une adresse MAC (modèle regex est pris (et peaufiné) de 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 
} 

si nous avons un tiret dans l'entrée (indiquant un préfixe) et ce qu'il est:

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

Voyez si nous finissons par A ou A1:

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

J'attends ceux-ci nè ed être adapté en fonction des différents types de terminaisons que vous recherchez, si des tirets peuvent apparaître sans forcément dire que c'est un préfixe, etc. Je suppose que vous devez retirer le préfixe et la fin et obtenir le nom du site principal valeur à des fins d'interrogation. Une fois que vous connaissez le type de données que vous traitez (adresse mac, nom du site), vous pouvez interroger votre base de données de manière appropriée.

Espérons que cela vous aidera à avancer dans la bonne direction!

+0

Merci! Ce premier m'aide particulièrement. J'ai mis à jour ma question originale en utilisant vos exemples et ceux de Codeius pour mettre en place quelque chose qui pourrait fonctionner. Pourriez-vous vérifier s'il y a des problèmes potentiels? – Skryn

0

vous pouvez essayer avec variable1 ==== varaible2

il compare la chaîne avec le type de données qu'il a trois caractère égal sinon il ne comparera les valeurs