正则表达式匹配(拆分?名称、城市和时间(<= 如何解析?



我请求以下格式的用户

KEYWORD <name> , <city> , <24:00 hour time>

第5点是最重要的,我想确保我用了所有可能的方法来解析<24:00 hour time>。
我想要什么
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。我的用户很笨。S/他将"短信(SMS)"的输入。因此,我想通过char ,拆分$info(希望只发生两次)并分别将三个子字符串存储到$usName, $usCity, $usTime中(前缀us =不安全数据,处理后的数据进入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需要映射到DB表中的City。我已经索引了City_Variance和City_Key表,它们通过City_Variance_City_Key表相互映射。因此,错误输入可以映射到正确的索引城市名称。现在假设City_Variance有/[:upper:]+/,所以没有多词城市(即没有Los Angeles)
5. 这是最有趣的部分,$usTime。这个字段的预期用途是在不久的将来创建一个约会。发现Datejs。这些都是PHP服务器端代码,我认为如果不模拟浏览器,我就无法使用简单JavaScript库的强大功能
有没有人知道一个库,可以帮助我解析用户输入像Datejs?

如果你有

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
)

最新更新