1

奇怪的问题。我有一个潜在的解决方案,但我正在寻求改进。所有这些都与 MS SQL/C# 项目有关,因此如果需要,请在该上下文中考虑事情。

制作表格供用户输入银行帐号。但是我们合作的不同客户银行有不同(和奇怪)的要求。这个数字有 13 位长,但 2,3 位是未知的,需要用户输入。后面的 10 位数字是零填充的,最后应该向用户显示 2 或 3 个字符。基本上,疯了。客户特定。其他一些客户对验证有各种要求,而我正试图解决这个问题,所以我正在寻找可扩展到足以处理随机客户请求的东西。

因此,例如,某人可能拥有部分帐号1__0000123456。他们需要在哪里输入缺少的两位数字。但我们可以显示 456。因此,希望将其放入显示 的蒙版文本框中1__000???456,只允许他们编辑__s.

当然,所有这些配置信息都存储在数据库中。并非所有人都可能缺少数字。

到目前为止,我想出的最佳解决方案是将部分数字与一些魔术字符一起存储,以指定丢失,可能是_. 然后在其旁边存储一个正则表达式,用于验证和分组区域。但也会用一些特殊的废话标记区域,例如“隐藏”。我认为我可以在组名中编码,这很愚蠢,但我有最好的主意。

因此,在数据库中,我可能有如下记录:

Number            Validation
1__0000123456     ^1\d\d0*(?<h:Account Id>123)456$

因此,我们有一个数字(部分)和一个验证表达式。但是该验证表达式在命名捕获组中有一些神奇的东西。":h" 表示应该隐藏该范围。所以,我可以隐藏随机范围,或者下一个疯狂的客户想要的任何东西。

上面将显示为一个包含 的蒙版文本框"1_0000???456",其中仅允许用户输入第二个和第三个数字。旁边的文本可以描述用户需要输入的内容作为“帐户 ID”,即命名捕获组名称的其余部分。

嗯。这是一个想法。不过,这感觉就像是在滥用我们都珍视的一切。

[编辑]

因此,这并不能真正很好地解决问题,因为我当然无法在值有效之前匹配该值:因此在用户输入有效序列之前无法知道要隐藏或显示的范围。如果有可能深入研究正则表达式的 AST 或其他东西……那就太好了。

4

1 回答 1

0

据我了解,您要求银行帐户的方式是特定于银行的。为什么不先问银行?然后您可以加载验证方法。

如果您不能要求用户选择银行(也许要求不允许您),我认为您唯一的选择是在用户输入银行帐户时即时检查正确的验证器。

于 2013-08-21T05:54:01.557 回答