繁体   English   中英

如何在 REGEX 表达式中多次只允许一个特殊字符

[英]How to allow only one special character multiple times in a REGEX expression

我正在尝试创建一个 REGEX 表达式,它只允许字母数字字符和一个可以多次使用的特殊字符。 可以包含的特殊字符是()-_,.$ 例如:
abc_def 有效
abc-def 有效
abc--def 有效
abc_-def 无效

我试图弄清楚并想出了这个: [a-zA-Z0-9]*[\\-_().,\\$]?[a-zA-Z0-9]*但这只允许出现一次的特殊字符(所以 abc--def 不会像我想要的那样有效)。 但如果我改变? *然后可以在字符串中包含多个不同的特殊字符(因此 abc-_def 将是有效的,但我不希望它是)。 我尝试了其他一些东西,例如: [[a-zA-Z0-9\\-]*[a-zA-Z0-9_]*...] (我的想法是这将读作( alphanumeric && '-') || (alphanumeric && '_') ||... ) 但我找不到任何可行的方法。

还值得注意的是: abc-def-ghi-jkl-mno 应该是有效的,因此[alphanumeric][specialcharacters][alphanumeric]形式的任何内容都不起作用。 此外,字符串可以以特殊字符开头和结尾。

是否可以创建一个可以按照我想要的方式工作的 REGEX 表达式? 还是我坚持自己写 function? 谢谢:)

PS 我在 Validators.pattern() 中使用它来控制 angular 9 中的表单,以防万一

^[a-zA-Z0-9]*([\(\)-_,\.\$])(?:\1*[a-zA-Z0-9]*)*$|^[a-zA-Z0-9]+$会做你的工作

正则表达式演示

细节:

^[a-zA-Z0-9]*([\(\)-_,\.\$]) :匹配任何字符,直到看到第一个特殊字符,将其放入第 1 组

(?:\1*[a-zA-Z0-9]*)*$ :匹配模式,从组 1 的特殊字符开始,然后是正常字符,尽可能多,直到字符串结尾

^[a-zA-Z0-9]+$ :用于没有特殊字符的特殊情况,例如abc

\1称为back-reference ,它将是最后匹配的组链接以了解更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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