REGEX匹配(拆分?)NAME,CITY和TIME(< =如何解析?)

时间:2011-10-07 08:05:48

标签: php regex datetime pcre

我要求用户提供以下格式

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

1 个答案:

答案 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
)