PHP - 检查逗号之前和之后是否有单词?

时间:2013-10-25 12:18:28

标签: php regex if-statement

我希望用户输入用逗号分隔的城市和国家/地区,以便将数据存储在我的数据库中。

现在我的当前代码是:

if (empty($_POST['location']) || substr_count($_POST['location'], ',') != 1) 

但这仅检查是否给出了一个逗号。我想检查逗号之前和之后是否有一个逗号和一个单词。 这些词至少应该有两个字符,因为我猜没有一个国家或城市有一个字符(?)。

编辑:我刚发现有些城市只有一个角色。所以请忘记我的最后一句话。

3 个答案:

答案 0 :(得分:3)

不确定。 preg_match/,\s*\w{2,}/会告诉您:

if (preg_match('/,\s*\w{2,}/', $_POST['location'])) {
    //Yep - there's a comma followed by at least two characters in there!
}

<强>尸检:

  • , - 文字,字符
  • \s* - 空格/制表符/换行符重复0到无限次
  • \w{2,} - 任意重复2次到无限次的字母

似乎你也在检查空的。

<?php
    $invalid = false;
    $split = preg_split('/,\s*/', $_POST['location']);
    foreach ($split as $part) {
        if (strlen($part) < 2) {
            $invalid = true;
            break;
        }
    }

    if (!$invalid) {
        echo 'Success!';
    } else {
        echo 'Error!';
    }
?>

如果您需要单个正则表达式来完成这项工作,您可以这样做:

if (preg_match('/^(\w{2,},\s*)*(\w{2,})$/', $_POST['location'])) {
    echo 'Success!';
} else {
    echo 'Error!';
}

DEMO

OK    city,country   
ERROR ok, city,country,   
ERROR n, foo, bar   
ERROR foo, bar, n   
ERROR ,foo, bar, test   
OK    foo,bar   
OK    foobar

答案 1 :(得分:0)

正则表达式是你的朋友

if(empty($_POST['location']) || !preg_match('/.+, .+/', $_POST['location'])

答案 2 :(得分:0)

这样做:

if(preg_match('/^.[a-zA-Z]+.( )?,.( )?.[a-zA-Z]+$/i', $_POST['location']))