-1

我需要确保保存的变量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 注入是不可能的,对吧?

4

3 回答 3

1

就像是?

/^([0-9]+-|)[cs][0-9_]+$/i
于 2013-05-21T07:27:07.960 回答
0

尝试这个:

[0-9\-_]*[s|c]{1}[0-9_]+
  • [0-9\-_]*匹配数字、破折号和下划线可以存在或不存在 (*)
  • [s|c]{1}匹配 s 或 c(应该存在一个 ({1}))
  • [0-9_]+匹配数字和下划线(至少应存在一个 (+))
于 2013-05-21T07:23:54.783 回答
0

你也可以试试这个;

/\b([0-9\-_]+)?([s|c])([0-9\-_]+)\b/i
于 2013-05-21T07:42:19.880 回答