[英]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.