【发布时间】:2013-03-29 04:35:07
【问题描述】:
我有一个脚本,允许用户提交搜索查询,通常采用站点名称的形式或使用设备的 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 函数来去除任何杂项字符,如连字符、句点、冒号等,因为拥有站点名称的前缀 TX- 部分很重要 - 如果它实际上是正在搜索的站点名称。
注意:我需要知道站点名称是否有前缀,以及示例中的结尾 A/A1。这些很重要。
我希望这是有道理的。 =/
哦,我正在用 PHP 做这个 - 忘了提。
更新:这段代码 sn-p 可以工作吗?
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 地址 0F-A0-FF:86 DE 84,pilcow 在stackoverflow.com/questions/4260467/… 上给出的正则表达式应该会更好
-
感谢您的提示,bkwint。
标签: php string forms string-comparison