【问题标题】:REGEX match (split ?) NAME , CITY and TIME (<= how to parse?)正则表达式匹配(拆分?)名称、城市和时间(<=如何解析?)
【发布时间】:2011-10-07 08:05:48
【问题描述】:

我正在向用户请求以下格式

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

第 5 点最重要,我想确保以所有可能的方式解析 。
我做了什么/想要什么
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 拆分为字符,(希望只会出现两次)并将三个子字符串分别存储到$usName, $usCity, $usTime 中(前缀我们=不安全的数据,处理后的数据进入数据库)
所以我想我会关注

$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 直接进入数据库(不用担心我使用准备好的 stmts)
4.$usCity需要映射到DB表中的一个City。我已经索引了 City_Variance 和 City_Key 表,它们通过 City_Variance_City_Key 表相互映射。因此,错误输入的输入可以映射到正确的索引城市名称。现在假设 City_Variance 有 /[:upper:]+/ 所以没有多字城市(即不是 Los Angeles
5. 这是最有趣的部分,$usTime。此字段的预期用途是在不久的将来创建约会。找到Datejs。这都是 PHP 服务器端代码,我不认为我可以在不模拟浏览器的情况下使用简单 JavaScript 库的强大功能
有谁知道可以帮助我解析用户输入的库,例如Datejs

【问题讨论】:

  • 你的问题有点混乱。你能简单地删除不相关的部分而不是删除它们吗? :)

标签: php regex datetime pcre


【解决方案1】:

如果你有

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
)

【讨论】:

  • 清理了一些东西,你想评论一下解析时间部分吗?
  • 我如何包含HH:MM(或)HH.MM。这对您来说是否正确:(?:[01]?[0-9]|2[0-3])[:.][0-5][0-9])
  • @Sudhi 是的,没错。如果您不关心验证数字范围,您可以使用\d?\d[.:]\d\d。我的变体只接受从00:0023:59 的有效时间。有大量的date and time functions in PHP,您会找到一个进行验证等的。
  • 非常感谢,PHP 聊天室的人建议使用 strtotime,所以我想我会跳过你的正则表达式的最后一点,而是使用 strtotime 验证/创建 DateTime
  • 上一条评论的更新,似乎 date_create() 比 strtotime 有用得多,再次感谢您的正则表达式
猜你喜欢
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多