gpt4 book ai didi

PHP is_numeric 或 preg_match 0-9 验证

转载 作者:IT王子 更新时间:2023-10-29 01:01:28 24 4
gpt4 key购买 nike

这对我来说不是什么大问题(据我所知),这更像是我感兴趣的事情。但是,使用 is_numeric 而不是 preg_match(反之亦然)来验证用户输入值的主要区别是什么?

示例一:

<?php
$id = $_GET['id'];
if (!preg_match('/^[0-9]*$/', $id)) {
// Error
} else {
// Continue
}
?>

示例二:

<?php
$id = $_GET['id'];
if (!is_numeric($id)) {
// Error
} else {
// Continue
}
?>

我假设两者的作用完全相同,但是否有任何特定差异可能会在以后以某种方式导致问题?有没有“最好的方法”或我没有看到的东西让它们与众不同。

最佳答案

is_numeric() 测试值是否为数字。但它不一定必须是整数 - 它可以是十进制数或科学记数法中的数字。

您给出的 preg_match() 示例仅检查值是否包含数字 0 到 9;任意数量,任意顺序。

请注意,您给出的正则表达式也不是一个完美的整数检查器,就​​像您编写它的方式一样。它不允许负面因素;它确实允许长度为零的字符串(即根本没有数字,这可能不应该是有效的?),并且它允许数字有任意数量的前导零,这又可能不是预期的。

[编辑]

根据您的评论,更好的正则表达式可能如下所示:

/^[1-9][0-9]*$/

这会强制第一个数字仅介于 1 和 9 之间,因此您不能使用前导零。它还强制它至少为一位数字长,因此解决了零长度字符串问题。

你不担心负面因素,所以这不是问题。

您可能想要限制位数,因为就目前情况而言,它将允许太大而无法存储为整数的字符串。要限制这一点,您可以将星号更改为长度限制,如下所示:

/^[1-9][0-9]{0,15}$/

这将允许字符串长度在 1 到 16 位之间(即第一个数字加上 0-15 个其他数字)。随意调整花括号中的数字以满足您自己的需要。如果你想要一个固定长度的字符串,那么你只需要在大括号中指定一个数字。

希望对您有所帮助。

关于PHP is_numeric 或 preg_match 0-9 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7649752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com