我想在 php 中创建一个正则表达式以确保字符串是以下格式之一:
- 仅整数示例:1122
- 整数,整数示例:88,99
- 整数,整数,整数示例:88,99,19
任何人都可以帮助我,无法思考。
最简单的正则表达式是\d+(,\d+)*
\d+
- 匹配从 0 到 9 的数字(,\d+)*
- 匹配逗号和(如上)从 0 到 9 的数字。 * 表示可能出现 0 次或更多次如果您需要限制为 3 次重复,那么这可以正常工作:\d+(,\d+){0,2}
(,\d+){0,2}
- 匹配逗号和(如上)从 0 到 9 的数字。{0,2} 表示最多可能出现 2 次(请记住,第一次\d+
将匹配第一个整数)编辑
您在评论中描述的问题是使用的 PHP 函数执行搜索而不是完全匹配。
preg_match
-在主题中搜索与模式中给出的正则表达式的匹配项。
所以正则表达式很好。但是对于preg_match
功能它应该是
preg_match('/^\d+(,\d+)*$/')
- 第一个正则表达式preg_match('/^\d+(,\d+){0,2}$/')
- 第二个正则表达式^
匹配字符串的开头(主题)并$
匹配字符串的结尾。
/^(\d+,)*\d+$/
这将匹配任何整数字符串或以逗号分隔的整数列表。
$var = '12'; // allow
//$var = '12,13'; // allow
//$var = '12,13,13'; // allow
//$var = 'aaa12,13,13fff'; // won't allow
//$var = '12,13,13,11'; // allow
if (preg_match('/^(\d+,)*\d+$/', $var))
{
echo 'correct';
}
else
{
echo 'wrong';
}