在我的table1中我有varchar字段,其中我存储其他table2的id-list(id-INT UNSIGNED AUTOINCREMENT),用逗号分隔.
例如:1,3,5,12,90
也不应该重复ID.
我需要检查字符串(来自外部)是否符合此规则.例如,我需要检查$ _POST ['id_list']
数据一致性现在并不重要(例如,插入此值而不检查table2中是否确实存在此ID)
任何建议都会有所帮助.
M0r*_*iis 10
进行此类检查的最简单方法是使用正则表达式(preg_match).让我们尝试找到符合我们规则的模式.
只是以逗号分隔的数字:
^[0-9]+(,[0-9]*)*$
Run Code Online (Sandbox Code Playgroud)
^ - 表示字符串的开头.
$ - 表示字符串结尾.
[0-9]+ - 表示我们的字符串必须以数字开头.
(,[0-9]+)* - 意味着我们的字符串CAN继续使用",$ someDigits"方式,从0到你想要的次数.
但如果我们的数字是"INT UNSIGNED AUTOINCREMENT",我们应该这样修改我们的模式:
^[1-9][0-9]*(,[1-9][0-9]+)*$
Run Code Online (Sandbox Code Playgroud)
排除案例如:0,01,02,009,000,012
至于唯一值,我认为更清楚的是使用逗号分割(爆炸)字符串到数组,通过array_unique传递并比较.
所以结果检查功能将是:
function isComaSeparatedIds($string, $allowEmpty = false) {
if ($allowEmpty AND $string === '') {
return true;
}
if (!preg_match('#^[1-9][0-9]*(,[1-9][0-9]*)*$#', $string)) {
return false;
}
$idsArray = explode(',', $string);
return count($idsArray) == count(array_unique($idsArray));
}
Run Code Online (Sandbox Code Playgroud)
如果你想允许空字符串,还添加了$ allowEmpty参数.