簡體   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