【问题标题】:javascript validation of a variable sequence of letters and numbers from a text input boxjavascript验证来自文本输入框的可变字母和数字序列
【发布时间】:2016-06-04 00:38:21
【问题描述】:

我在数据库中有许多不同的公司(客户)。每个人都需要一个订单号才能传递给他们。但是他们都希望订单号是不同的数字和字母序列。

所以在数据库中我有一列代表这种格式。例如 @@@###@@@ => 3 letters, 3 numbers, 3 letters AB##@@ => 'AB', 2 numbers, 2 letters ###### => 6 numbers 等等

我需要验证这些订单号的用户输入(文本框),以便它们符合客户对字符串结构的要求。

有什么想法可以用 javascript 实现吗?有没有我可以使用的函数或库,我可以简单地“插入”从数据库中获取的格式,它会根据用户输入的字符返回 true 或 false。

“固定”正则表达式很简单,但它是动态的并且基于客户,并且有数百种不同的格式...

任何帮助表示赞赏。

【问题讨论】:

  • 安静松散,^[a-zA-Z]{2,3}[0-9]{2,3}[a-zA-Z]{2,3}$.
  • 但是我需要每个客户的订单号结构的精确副本。所以一个可能是@@@##(字母、字母、字母、数字、数字),另一个可能是 AA####(以 AA 开头,后跟 4 个数字)。该数据库中有数百种不同的格式。
  • 我需要某种库,它将从数据库中获取格式,将其解释为“常量”、字母、数字,然后返回真或假。或类似的东西......
  • “‘固定’正则表达式很简单,但这是动态的,并且基于客户,并且有数百种不同的格式......”根据用户输入确定?
  • 它在页面加载中。我想得越多,我想到的可能实现解决方案的方法就越多,但我认为 phenxd 给了我最简洁的解决方案,即简单地使用字符串替换来构建正则表达式。

标签: javascript jquery regex


【解决方案1】:

如果 @ -> 字母和 # -> 数字是您唯一的特殊情况,您可以简单地替换为正则表达式。

var formatField = "AB##@#YZ";
formatField = formatField.split('@').join('[a-zA-Z]');
formatField = formatField.split('#').join('[0-9]');

var reg = new RegExp("^" + formatField + "$");
console.log(reg.test("AB12R3YZ")); // true
console.log(reg.test("2312R3YZ")); // false

JSFiddle

【讨论】:

  • 啊,我明白了,你用 [a-zA-Z] 替换了 @ 符号,你用 [0-9] 替换了 # 符号,从而构建了正则表达式 :) 非常好的解决方案.谢谢你 phenxd :)
【解决方案2】:

您可以使用select 元素让用户选择他们将为其输入客户编号的公司;在选择时,您可以显示与该公司关联的 input 元素,该元素具有 pattern 属性,其中包含反映该公司所需输入的 RegExp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2015-03-19
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    相关资源
    最近更新 更多