【发布时间】:2012-05-22 13:31:50
【问题描述】:
我有一个 Web 应用程序,用 PHP 编写,包含 Javascript 和 JQuery,将用作我公司的库存管理系统 (IMS)。我希望能够创建一个基于用户输入值的正则表达式。
这背后的想法是,大多数制造商的序列号架构、字符长度以及字母与数值的混合对于某个部分来说是唯一的。因此,当将零件添加到 IMS 并将第一个序列号扫描到系统中时,我希望构建一个 Regex 语句并将其保存到与该零件类型对应的数据库表中。以后扫描序列号时,应自动选择部件作为部件类型,因为它与该制造商的序列号模式匹配。我知道这种方法可能并不总是适用于单个部件,因此我什至可以返回与架构匹配的部件列表,而不是用户需要在目录中查找它。
我的问题的基础是,让代码中的函数能够破译用户提供的值以创建正则表达式的最佳起点是什么?我不是要求一个完整的功能,而是一个如何看待我的情况和目标的起点,这样我就可以了解从哪里开始。我已经挠头够久了,开始编写函数无数次,只是为了删除整个块,因为我知道我正走向灾难。
代码中的任何事情都是可能的——这可行吗?
编辑 - 添加样本值
DVD-RW(光驱)
- 1613518L121
- 1613509L121
- 1613519L121
VGA 输出卡
- 0324311071068
- 0324311071134
COM 扩展卡
- 608131234
- 608131237
硬盘
- WMAYUJ753738
- WMAYUJ072099
- WMAYUJ683739
- WMAYUJ844900
如您所见,某些值将只是特定长度字符的数字。其他人将在开头有字母字符,后跟一系列数字。其他人可能有相互穿插的字母/数字字符。在大多数情况下,一个简单的字母/数字规则长度将适合识别我们商品列表中的单个零件类型。但是,在多个表达式匹配一个值的情况下,我可以简单地让应用程序显示两个或多个与正则表达式匹配的产品的列表,并提示用户选择正确的部分。总体而言,这将节省在 WMS 数据库中选择产品类型的时间和错误。
感谢 cmets。我知道我问的问题不是只有一个答案。我正在寻找一个起点,了解如何最好地逐步遍历字符串并吐出与该值匹配的相应 Regex 语句。
【问题讨论】:
-
我认为你做不到。你不能根据一个例子制定规则。无论如何,这是我的看法。
-
Pete,您认为创建一个有效的表达式需要多少样本?或者你是在暗示整个想法本身是无效的?
-
啊。那完全是另一回事。这有点像破解密码,不是吗?在我看来,危险在于您根据 X 个案例制定规则,然后因为该规则在某些方面存在缺陷而退回大量数据。
-
但是不要让我阻止你尝试 - 这可能是一个迷人的项目。你有例子吗?
-
也许你可以分步处理?另外,如果你有一些样本值,我很确定你会有其他的回复?顺便说一句,我会尝试首先搜索在处理正则表达式时必须保护的特殊字符(如点 [.],在这些字符上拆分我的值)或可以被视为分隔符的字符,如“-”或“_”(想想 ISBN 号)。然后让一些类匹配,如 [0-9]+、[A-Z]+ 或 [a-z]+ 加上它们的长度(最小、最大)提取?这样您就可以拥有一些自定义规则,例如 'myLettersWithLengthX' + (mySeparators('-')) + myNumbersLengthBetween(m,n)...
标签: php javascript regex