2017-02-22 46 views
0

我在我所限制用户能够输入的文本框值大于字母数字键之间并与以下如果所有的字符不是零组合和特殊字符

regex = /[^a-zA-Z0-9/]+$/g; 

所以用户不能输入斜线斜线以外的特殊字符/

现在有在我不希望用户输入这两种组合的新方案:

  • 0
  • 00/00/000/
  • 0////
  • ////
  • 000/000/
  • etc

输入文本的输入大小为20,所以任何长度可能是可能的我关心的是比0/是有效的其他任何字符。

这些应该是有效的:

  • 01/001/01/
  • 01
  • 1
  • a1/12
  • 00/10/00/1
  • 1/1/1/1/00
  • 0/00/0

输入中除零或斜线之外的任何内容都是有效的。即使一次出现的字母或数字大于零,也是有效的。

任何帮助是非常可观的。正则表达式是最受欢迎的。 非常感谢。

+0

你最后一个有效输入'0/00/0'的例子似乎与描述相矛盾?只有当斜线结束时才会这样吗? – whrrgarbl

+0

@whrrgarbl不是这种情况,字符可以在一到二十之间的任何地方终止,如果结尾字符为零或斜线,它们应该是最小的一个非零数字或任何字母表 – Mavericks

+0

好吧,那么......你的最后一个例子应该*不*实际匹配? – whrrgarbl

回答

0

首先,你的锚在错误的地方,否定你希望允许的字符:这里

regex = /[^a-zA-Z0-9/]+$/g; 
     ^

移动它:

regex = /^[a-zA-Z0-9/]+$/g; 
     ^

这里的解决方案。我已经表明我说什么用“+”:

regex = /^(?![0/]+$)[a-zA-Z0-9/]+$/g; 
      ++++++++++ 

(?!foo)模式被称为负先行,它的JavaScript支持。如果即将到来的字符匹配foo,则匹配失败。因此,如果即将出现的字符全部为零或斜杠,则匹配将失败。然后它开始检查所有字符是字母数字还是斜杠。

虽然@Mavericks指出,但我不知道最后一例“0/00/0”是怎么回事。

0

尝试这种情况:

regex = /(^[^a-zA-Z0-9/]+$)|(^[0/]+$)/g

这简单地在端部增加了第二个匹配组:(^[0\/]+$)判断是否完全是0和斜线。