繁体   English   中英

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

[英]Allow star only once and not allow it not to be mixed with any other

我有以下正则表达式。 我想验证像abcd,*,acd123等。我不希望*与任何类似的abc *混合,并且应该只允许其中一个以下应该被拒绝** or *,*

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

有效:

ADSAD,*,adsad
*,adsds,asd123

无效:

**,asads
sasd,*,asa,*

*放在字符类之外,只允许它作为字母数字或/符号的替代:

/^(?!.*\*.*\*)(?:(?:\*|[A-Za-z\d\/]+)(?:,(?:[A-Za-z\d\/]+|\*))*)?$/

请参阅正则表达式演示

细节

  • ^ - 字符串的开头
  • (?!.*\\*.*\\*) - 一旦字符串中有2 *符号就会使匹配失败的负向前瞻
  • (?:(?:\\*|[A-Za-z\\d\\/]+)(?:,(?:[A-Za-z\\d\\/]+|\\*))*)? - 一个可选组(整个字符串可以为空)匹配:
    • (?:\\*|[A-Za-z\\d\\/]+) - a *\\* )或( | )1个或多个字母数字或/符号( [A-Za-z\\d\\/]+ ),然后跟着
    • (?:,(?:[A-Za-z\\d\\/]+|\\*))* - 零个或多个序列:
      • , - 一个逗号
      • (?:[A-Za-z\\d\\/]+|\\*) - 1个或多个字母数字或/符号或*
  • $ - 结束字符串。

我不确定它会解决你的整个问题,但发布的问题可以这样解决:

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

哪里

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

结果如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM