我有下面的正则表达式。我想验证像abcd,*,acd123
等。我不希望*与任何像abc*一样的东西混在一起,它应该只允许一次ex以下应该被拒绝** or *,*
/^([A-Za-zd/*]+(,[A-Za-zd/*]+)*)?$/.test(v)
有效:ADSAD,*,adsad
*,adsds,asd123
无效:**,asads
sasd,*,asa,*
我不确定它会解决你的整个问题,但张贴的问题可以通过这种方式解决:
^([^*]*,)?*(,[^*]*)?$
,
-
^
为字符串的开始; -
[^*]
是除和星号以外的任何字符。- 由于我们有
[^*]*,
,它意味着任何数量的非星号的字符,后面跟着逗号; -
([^*]*,)?
表示我们在字符串中有0个或最多一个。
- 由于我们有
-
*
是星号字符。因为它是一个特殊的,我们需要用;
转义它。 - 再次,我们有' ([^],)?
-
$
表示字符串的结束。
结果如下:
> /^([^*]*,)?*(,[^*]*)?$/.test('abc,*,def')
true
> /^([^*]*,)?*(,[^*]*)?$/.test('abc,def')
false
> /^([^*]*,)?*(,[^*]*)?$/.test('abc,*,def,*,a')
false
> /^([^*]*,)?*(,[^*]*)?$/.test('abc,*')
true
> /^([^*]*,)?*(,[^*]*)?$/.test('*,abc')
true
将*
排除在字符类之外,并且只允许它作为字母数字或/
符号的替代:
/^(?!.**.**)(?:(?:*|[A-Za-zd/]+)(?:,(?:[A-Za-zd/]+|*))*)?$/
查看regex演示
:
-
^
-字符串 起始 -
(?!.**.**)
-一旦字符串 中有2个 -
(?:(?:*|[A-Za-zd/]+)(?:,(?:[A-Za-zd/]+|*))*)?
-一个可选的组(整个字符串可以为空)匹配:-
(?:*|[A-Za-zd/]+)
-*
(*
)或(|
) 1个或多个字母数字或/
符号([A-Za-zd/]+
),然后后跟 -
(?:,(?:[A-Za-zd/]+|*))*
- 0个或多个序列:-
,
-逗号 -
(?:[A-Za-zd/]+|*)
- 1个或多个字母数字或/
符号或*
-
-
-
$
-字符串结束
*
符号,就会导致匹配失败