我正在创建一些 Intranet 软件并确定计算机所在的房间号和 PC 号,我正在使用 REMOTE_HOST 服务器阵列。
这是我的代码:
$hostname = $_SERVER['REMOTE_HOST'];
//Check to see if the computer name is compatible with room auto-detect
if (preg_match("/G|F\d{1,2}-.*?-PC\d{1,2}.*?/i", $hostname)) {
$room = explode("-", $hostname);
$pc = explode(".", $room[2]);
} else {
$pc[0] = "NA";
$room[0] = "other";
}
如果计算机名称如下所示,则此陈述必须为真:
g22-dell-pc23.roundhay.local
f48-lenovo-pc02.roundhay.local
g6-asus-pc18.roundhay.local
如果语句与上述不同,则需要将房间和 pc 数组恢复为 NA 和其他。
我可以成功提取房间号和 PC,但是当一台具有非标准名称的 PC 使用该软件时,它仍然会尝试提取信息并且该软件失败,因为它没有信息可以继续。
例如:
g22-smartboard.roundhay.local
该软件仍会尝试获取 PC 号码,即使它与我的正则表达式不匹配。但是,在我的计算机名称为 JOSH-PC 的测试 PC 上,它确实会退回到默认信息。
我已经测试了我的正则表达式,每当名称以 G 或 F 开头时,它似乎都是正确的。
我需要它专门匹配这些要求:
- 第一个字母是 G 或 F
- 然后是 0 - 9 的一位或两位数字
- 然后 -
- 然后任意数量的字母 az
- 然后 -
- 然后是字母 PC
- 然后是 0 - 9 的一位或两位数字
- 然后什么
我已经尝试了各种方法来让它工作,但我只是不正确理解正则表达式。我已经查过了,但它太令人困惑了。