【问题标题】:Mysql regex alphanumerical with some special chars带有一些特殊字符的 Mysql 正则表达式字母数字
【发布时间】:2013-04-04 07:10:03
【问题描述】:

好吧,我已经做了一些噩梦,所以我向 Stackoverflow 的全能蜂巢思维低头。

UPD:我的任务的参数已更改。我需要找到可能包含特殊字符的代码,例如括号 () 和/或 @、#、&、$。

所以代码可能看起来像:

“A”、“Bb”、“2C8”、“A7(BO)19”、B29H$、29H(6JI)0#等

问题是所有这些代码都是可选的。我试过像 Barmar(见回复 1)建议的那样,但稍微修改了 MySQL 查询:

SELECT *
FROM table
WHERE column REGEXP '^[a-z0-9\@\#\$\&()]*$' 
AND column LIKE CONCAT('%', '$v', '%')

如果我搜索“SLJ”或“S(LJ)”,它无法返回“S(LJ)9”或“09S(LJ)3$”

好吧,除了我的 DNA 中一些真正重要的核苷酸序列可以让我更有效地使用大脑(或拥有它们)之外,我在这个正则表达式或查询本身中缺少什么? 提前感谢任何人。

【问题讨论】:

  • 用户输入的字符是否需要在值中?

标签: php mysql regex


【解决方案1】:
SELECT *
FROM table
WHERE column REGEXP '^[a-z0-9()]*$' /* code contains alphanumerics and parentheses */
AND column NOT REGEXP '[0-9]{3}' /* code does not contain >2 digits in a row */
AND column LIKE CONCAT('%', ?, '%') /* code contains the user input */

在哪里?与用户输入绑定(您应该使用 PDO 或 mysqli 准备好的语句)。

【讨论】:

  • 谢谢,巴尔玛!用户最多可以输入5个代码,并且可以在5列中随机遇到。逻辑是找到所有代码都可以在任何特定列中找到的行:SELECT * FROM table WHERE ID IN(SELECT ID FROM table WHERE (((col0 REGEXP '^[\w()]*$' AND col0 LIKE CONCAT('%', '$v', '%'))OR ... OR(col4 REGEXP '^[\w()]*$' AND col4 LIKE CONCAT('%', '$v', '%')))AND ... AND((col0 REGEXP '^[\w()]*$' AND col0 LIKE CONCAT('%', '$v5', '%'))OR ... OR(col4 REGEXP '^[\w()]*$' AND col4 LIKE CONCAT('%', '$v5', '%')))) and othercol is NOT null) 遗憾的是它什么也没返回
  • Mysql 没有 \w\d 正则表达式转义序列,我改变了我的答案来扩展这些。试试这个表格。
  • 再次感谢巴尔玛。在您的解决方案的最后一次更新之后,它运行良好。可悲的是,我正在使用的项目对数据库中的此类搜索非常敏感。我会努力掌握正则表达式的艺术:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多