繁体   English   中英

正则表达式不允许在字符串开始或结束处使用“.”、“_”、“-”,并且不应有连续的“.” 其余的所有特殊字符都不应被允许

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM