[英]Regex to not allow '.', '_', '-' at String Start or End and should not have consecutive '.' and the rest all special characters should not be allowed
输出应该像
.test_test1-test - INVALID
test2_test-test. - INVALID
_test.test-test- - INVALID
test.test-test - VALID
test._test-test - INVALID
下面提到了我目前的表达方式
/^[a-zA-Z0-9](?![_.-]?[^\na-zA-Z0-9]{2}).*?[a-zA-Z0-9]$/gim
我可以想出一个这样的正则表达式:
^[a-z]+(?:-[a-z]+)*(?:\.[a-z]+(?:-[a-z]+)*)+$
但是,这会产生很多回溯,如果字符串很长,它会很慢
我认为对您来说最好的解决方案是将字符串拆分为.
然后验证每个字符串是否与^[az]+(?:-[az]+)*$
的模式匹配
对于您要执行的操作,您的正则表达式接缝有点复杂。
你的正则表达式有两部分:
test
加上一个符号,重复两次。test
但没有符号,结束正则表达式。 此外,您不需要在匹配组中验证AZ
,因为您的正则表达式具有不区分大小写的标志。
这是一个工作示例:
/^([a-z0-9]+[._-]?){2}([a-z0-9]+)$/gmi
您可以在这里测试更多案例
如果先将条件应用于整个字符串,则结果如下:
/^(?![._-])(?!.*[._-]$)(?!.*[._-][._-])[\\w.-]*$/
https://regex101.com/r/hnVimE/1
解释
^ # BOS
(?! [._-] ) # Not . or _ or - at beginning
(?! .* [._-] $ ) # Not . or _ or - at end
(?! .* [._-] [._-] ) # No consecutive . or _ or -
[\w.-]* # Not special characters, except . or _ or -
$ # EOS
这设置为匹配空字符串[\\w.-]*
,将量词设置为+
如果文本也是一个要求。
您还可以使用:
^[^a-z0-9]|[_.-]{2,}|[^a-z0-9]$
然后否定结果:
rg = new RegExp('^[^a-z0-9]|[_.-]{2,}|[^a-z0-9]$','gim')
!rg.test('test.test-test')
例子:
rg = new RegExp('^[^a-z0-9]|[_.-]{2,}|[^a-z0-9]$','gim') console.log('Valid') console.log('test.test-test', !rg.test('test.test-test')) console.log('Invalid') console.log('.test.test-test', !rg.test('.test.test-test'))
更多例子在这里
/^(?!.*\.\.)[a-zA-Z0-9_-](?:[a-zA-Z0-9_.-]{0,62}[a-zA-Z0-9_-])?$/
这个表达式适用于所有提到的场景。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.