我该如何比较这些类型的字符串



我有一个脚本,允许用户提交搜索查询,通常以站点名称的形式或使用设备的MAC地址。我希望使搜索尽可能简单,所以只需要一个搜索字段,而不希望用选择字段或单选按钮来让用户指定他们要搜索的内容,从而使搜索变得混乱。我想在后台自动处理。

下面是我希望通过以下格式之一搜索站点名称的方式:

字母和数字只是例子,可以是任何东西,只是在这种格式。

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

OR按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做的——忘了说了。

UPDATE:这个代码片段可以工作吗?

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
}

这里有一些片段应该会有所帮助。

看看我们是否有一个MAC地址(regex模式取自(和调整)什么是MAC地址的正则表达式?):

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地址,站点名称),你就可以适当地查询你的数据库。

希望这些能让你朝着正确的方向前进!

下面的SQL查询将查找site与输入相似的行,或者mac恰好是输入的行。

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

您可以尝试使用variable1 ==== varaible2

将字符串与数据类型进行比较,因为它有三个相等字符否则它将只比较

相关内容

  • 没有找到相关文章

最新更新