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