我有一个脚本,允许用户提交搜索查询,通常以站点名称的形式或使用设备的MAC地址。我希望保持搜索尽可能简单,因此只需要一个搜索字段,并且不希望用选择字段或单选按钮使其混乱,以便用户指定他们要搜索的内容。我想在后端自动处理它。
以下是我希望以下列格式之一搜索网站名称的方式:
字母和数字只是示例,可以是任何形式,只需这种格式。
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函数来去除任何misc字符,如连字符,句点,冒号等,因为拥有站点名称的前缀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
}
答案 0 :(得分: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地址,站点名称),你就可以适当地查询你的数据库。
希望这些会让你朝着正确的方向前进!
答案 1 :(得分:2)
下面的SQL查询将找到其中site与输入类似的行,或者mac恰好是输入。
SELECT * FROM `table` WHERE `site` LIKE '%$input%' OR `mac` = '$input';
答案 2 :(得分:0)
您可以尝试使用variable1 ==== varaible2
它会将字符串与数据类型进行比较,因为它具有三个等号字符 否则它只会比较值