仅允许星形一次,不允许它与任何其他星形混合

时间:2016-10-06 11:11:07

标签: javascript regex

我有以下正则表达式。我想要像abcd,*,acd123等那样进行验证。我不希望*与任何类似的abc *混合使用,只有在被拒绝之后才应该允许* {1}}

** or *,*

有效的:

/^([A-Za-z\d\/\*]+(,[A-Za-z\d\/\*]+)*)?$/.test(v)

无效:

ADSAD,*,adsad
*,adsds,asd123

2 个答案:

答案 0 :(得分:0)

/放在字符类之外,只允许它替代字母数字或/^(?!.*\*.*\*)(?:(?:\*|[A-Za-z\d\/]+)(?:,(?:[A-Za-z\d\/]+|\*))*)?$/ 符号:

^

请参阅regex demo

<强>详情:

  • (?!.*\*.*\*) - 字符串开头
  • * - 一旦字符串中有2个(?:(?:\*|[A-Za-z\d\/]+)(?:,(?:[A-Za-z\d\/]+|\*))*)?符号
  • ,就会失败。
  • (?:\*|[A-Za-z\d\/]+) - 一个可选组(整个字符串可以为空)匹配:
    • * - \*|)或(/)1个或多个字母数字或[A-Za-z\d\/]+符号((?:,(?:[A-Za-z\d\/]+|\*))*),然后
    • , - 零个或多个序列:
      • (?:[A-Za-z\d\/]+|\*) - 逗号
      • / - 一个或多个字母数字或*符号或$
  • <form action="" method="post" id="myform"> <input id="amount" type="text" placeholder="Give amount" name="myamount"/> <button class="btn btn-lg" type="submit" id="btn1" >FirstBTN</button> <button class="btn btn-lg" type="submit" id="btn2">SecondBTN</button> </form> - 字符串结束。

答案 1 :(得分:0)

我不确定它会解决你的整个问题,但发布的问题可以通过这种方式解决:

^([^*]*,)?\*(,[^*]*)?$

,其中

  • ^是字符串的开头;
  • [^*]星号的任何字符。
    • 由于我们有[^*]*,,它表示任意数量的字符不是星号,后跟逗号;
    • ([^*]*,)?表示我们在字符串中只有零个或最多一个。
  • \*是星号字符。由于它是一个特殊的,我们需要使用\;
  • 来逃避它
  • 同样,我们有`([^ ] ,)?
  • $表示字符串的结尾。

结果如下:

> /^([^*]*,)?\*(,[^*]*)?$/.test('abc,*,def')
true
> /^([^*]*,)?\*(,[^*]*)?$/.test('abc,def')
false
> /^([^*]*,)?\*(,[^*]*)?$/.test('abc,*,def,*,a')
false
> /^([^*]*,)?\*(,[^*]*)?$/.test('abc,*')
true
> /^([^*]*,)?\*(,[^*]*)?$/.test('*,abc')
true