我希望用户输入他的城市和国家,用逗号分隔以将数据存储在我的数据库中。
现在我当前的代码是:
if (empty($_POST['location']) || substr_count($_POST['location'], ',') != 1)
但这仅检查是否给出了一个逗号。我想检查逗号之前和之后是否有一个逗号和一个单词。这些词至少应该有 2 个字符,因为我猜没有一个国家或城市有一个字符(?)。
编辑:我刚刚发现有些城市只有一个角色。所以请忘记我的最后一句话。
我希望用户输入他的城市和国家,用逗号分隔以将数据存储在我的数据库中。
现在我当前的代码是:
if (empty($_POST['location']) || substr_count($_POST['location'], ',') != 1)
但这仅检查是否给出了一个逗号。我想检查逗号之前和之后是否有一个逗号和一个单词。这些词至少应该有 2 个字符,因为我猜没有一个国家或城市有一个字符(?)。
编辑:我刚刚发现有些城市只有一个角色。所以请忘记我的最后一句话。
当然。preg_match
with/,\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!';
}
OK city,country
ERROR ok, city,country,
ERROR n, foo, bar
ERROR foo, bar, n
ERROR ,foo, bar, test
OK foo,bar
OK foobar
正则表达式是你的朋友
if(empty($_POST['location']) || !preg_match('/.+, .+/', $_POST['location'])
做这个:
if(preg_match('/^.[a-zA-Z]+.( )?,.( )?.[a-zA-Z]+$/i', $_POST['location']))