2013-10-25 42 views
0

我想要一个用户输入他的城市和国家用逗号隔开,以将数据存储在我的数据库中。现在PHP - 检查在逗号后面是否有一个单词?

我当前的代码是:

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

但如果逗号是有这个只检查。我想检查逗号前面是否有逗号和一个单词。 此外,这些词应该至少有2个字符,因为我猜没有一个国家或城市有一个字符(?)。

编辑:我刚刚发现有一个城市只有一个字符。所以请忘记我最后一句话。

+1

我认为这是对正则表达式 –

+0

它更容易为我们了解你想匹配,当你提供一个例子超值,喜欢'城市,国家什么样的情况下 - >确定,城市,国家, - >坏,...' –

+0

@ZathrusWriter一个正确的格式将是:'城市,国家'这就是为什么只有一个逗号应该被允许,并在该逗号后面的AND之前的字符串。 – AlexioVay

回答

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 
+0

该死的你为什么输入如此之快的男人? – pythonian29033

+0

@ pythonian29033哈哈 - 对不起! :) – h2ooooooo

+1

+10你的正则表达式比我的好,但我只想到1k代表你知道吗? – pythonian29033

0

正则表达式是你的朋友

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

我有点困惑,因为我之前没有使用RegEx。我无法按照我想要的方式工作。我真正想要的是这样的:1)以[a-zA-Z]格式开头的一个或多个字符。 2)在第一个字符后面的整个输入字段中只允许使用一个逗号。 3)以[a-zA-Z]格式的逗号后面的一个或多个字符。 4)在这个角色后面没有特殊字符,逗号或类似的东西。 5)不允许空输入。 6)不只有一个单词或字符没有逗号。7)只有这种格式:城市,国家(如果用户在逗号后放置空格,则无关紧要) – AlexioVay

0

做到这一点:

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

我有点困惑,因为我之前没有使用过RegEx。我无法按照我想要的方式工作。我真正想要的是这样的:1)以[a-zA-Z]格式开头的一个或多个字符。 2)在第一个字符后面的整个输入字段中只允许使用一个逗号。 3)以[a-zA-Z]格式的逗号后面的一个或多个字符。 4)在这个角色后面没有特殊字符,逗号或类似的东西。 5)不允许空输入。 6)不只有一个单词或字符没有逗号。 7)只有这种格式:城市,国家(如果用户在逗号后放置空格,则无关紧要) – AlexioVay

+0

好的,试试我的新正则表达式,那个应该适合你的情况。请注意,正则表达式周围的^ $字符会告诉它从头到尾进行比较 – pythonian29033

相关问题