我需要确保保存的变量product id
仅包含特定字符。
对于我is_numeric
用来检查的仅整数变量。
但对于产品 ID,该变量只能包含以下字符:
- 许多数字 [0-9]
- 字符 -(破折号)AND/OR _(下划线)
- 它可以包含字母“s”或“c”(但不能一起)
例如,这是有效的:c23_2308724208_9873208
,这是有效的:12-c53_09872807342
,这是有效的:s23_208320720
。但这无效:12-2352'; SELECT * FROM administrators;
.
我可以了解变量的格式,但我认为我不需要它,只要我确保变量仅包含上述内容即可。我想要做的就是检查可以防止 SQL 注入。所以我认为我不需要关心格式,不是吗?我只想确保s,c,[0-9],[-,_]
可以在变量中找到给定的字符,并且在这个有效字符范围之外没有任何内容。
编辑
根据有人评论严格遵循格式,那么确切的格式如下:
- 可选的数字前缀和破折号(例如 132-)
- 必要的字母(s 或 c)后跟一些数字,然后是下划线,然后是更多数字(例如 s234_23872084732)
- 下划线的可选后缀,后跟更多数字(因此这种情况的完整示例是
s234_23872084732_201874018743
)。
因此,如果所有可选的东西都在那里,那就像132-s234_23872084732_201874018743
,如果只有必要的组件在那里,那么s234_23872084732
。
但作为技术点,为什么必须遵循严格的正则表达式?只要我确保只有必需的字符,SQL 注入是不可能的,对吧?