我正在尝试创建一个仅允许使用字母数字字符和一个可以多次使用的特殊字符的REGEX表达式。可以包含的特殊字符是()-_,.$
。例如:
abc_def有效
abc-def有效
abc--def有效
abc_-def无效
我试图弄清楚并提出了这个建议:[a-zA-Z0-9]*[\\-_().,\\$]?[a-zA-Z0-9]*
但是那只允许特殊字符出现一次(因此abc--def无效,就像我想要的那样)。但是,如果我将更?
改为a,*
则字符串中可以包含多个不同的特殊字符(因此abc-_def将是有效的,但我不希望这样)。我尝试了其他类似的东西:[[a-zA-Z0-9\\-]*[a-zA-Z0-9_]*...]
例如(我的想法是将其读为(alphanumeric && '-') || (alphanumeric && '_') || ...
),但找不到任何有效的方法。
同样值得注意的是:abc-def-ghi-jkl-mno应该是有效的,因此任何形式的东西[alphanumeric][specialcharacters][alphanumeric]
都行不通。此外,字符串可以以特殊字符开头和结尾。
是否可以创建一个REGEX表达式,使其以我想要的方式工作?还是我坚持写自己的函数?谢谢 :)
PS我在Validators.pattern()中使用它来控制角度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
,它将是最后一个匹配的群组链接,以了解更多信息
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句