正则表达式,字符串是白名单字符的组合,不包含任何黑名单

时间:2013-03-12 11:56:44

标签: javascript regex qml

1)如何正则表达式验证用户输入是否包含A组中的任何字符组合,以及不包含来自另一组D的任何字符? 2)同时检查字符串长度是否在2到255之间

换句话说,对于所有字符串字符:A AND NOT D。

我从服务器收到两组字符(白名单和黑名单),需要根据这些字符验证用户输入。我不能影响设计,必须忍受它。由于其他设计限制,我也必须使用正则表达式。


这是我到目前为止所做的事情(根本不工作):

/^(?![23]+)[0-9]{2,255}$/

为简单起见,

23 将成为字符黑名单 为了简单起见, 0-9 将是字符的白名单

一些例子:

3014567890 - >失败,3存在 0145678902 - >失败,2存在
0123456789 - >失败,2和3存在 014567890 - > OK
88774411489 - > OK
5 - >失败,没有足够的人物 1abc - >失败,非法的非法人士 ab1c - >失败,非法的非法人士 abc1 - >失败,非法的非法人士


谢谢!

1 个答案:

答案 0 :(得分:4)

你快到了,先行断言需要一些工作:

/^(?!.*[23])[0-9]{2,255}$/

这样,如果字符串中的任何地方(至少)有一个23(即,任意数量的字符后.*),则负前瞻中的正则表达式会匹配)),导致断言失败。

在这个(显然)简化示例中,您当然可以使用/^[014-9]{2,255}$/