我要求用户提供以下格式
KEYWORD <name> , <city> , <24:00 hour time>
第5点是最重要的,我想确保我解析&lt; 24:00小时时间&gt;尽我所能的方式。
我做了什么/想做什么
1.分割输入以获取$ info(= $ input - $ keyword),如下所示:
$key = 'abc'; $msg = 'ABC blah, blah, blah';
$pat = "/^(?i)$key/";
$split = preg_split($pat, $msg);
$info = $split[1]; //$split[0] = ''; //empty string
2。我的用户很蠢。他/她将“发短信(SMS)”输入。所以我想将$info
拆分为char ,
(希望只发生两次)并将三个子串分别存储到$usName, $usCity, $usTime
(前缀为us = Un-Safe数据,处理后的数据进入DB)
所以我想我会做以下
$split = preg_split('/,/', $info);
foeach($split as $block) {
if(preg_match('/[12]?:\d{2}/', $block) {
$usTime = $block;
}
} //what do I do for $usName and $usCity
3。 $usName
直接进入DB(不要担心我使用准备好的stmts)
4. $usCity
需要映射到数据库表中的City。我已经通过City_Variance_City_Key表索引了相互映射的City_Variance和City_Key表。因此,输入错误的输入可以映射到正确的索引城市名称。现在假设City_Variance有/[:upper:]+/
所以没有多字城市(即NOT Los Angeles
)
这是最有趣的部分,$usTime
。该领域的预期用途是在不久的将来创建一个约会。找到Datejs。这是所有PHP服务器端代码,我不认为我可以在不模拟浏览器的情况下使用简单JavaScript库的强大功能
有没有人知道一个可以帮助我解析用户输入的库,如Datejs?
答案 0 :(得分:0)
如果你有
KEYWORD <name> , <city> , <24:00 hour time>
且"KEYWORD"
为[:alpha:]+
,其他内容不能包含逗号,只需使用一个带有子组的正则表达式而不是split()
。
$re = "/
^
[A-Z]+\s*
([^,]+)\s*,\s*
([^,]+)\s*,\s*
((?:[01]?[0-9]|2[0-3]):[0-5][0-9])
$
/x";
$msg = 'ABC blah, blah, 12:45';
$result=null;
preg_match($re, $msg, $result);
print_r($result);
返回
Array
(
[0] => ABC blah, blah, 12:45
[1] => blah
[2] => blah
[3] => 12:45
)