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

杰克·诺斯沃西

我正在尝试创建一个仅允许使用字母数字字符和一个可以多次使用的特殊字符的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在正则表达式中仅允许一个点?

preg_match中仅字母数字和一个特殊的字符正则表达式

正则表达式-仅一个特殊字符

创建一个仅允许特定字符的正则表达式

正则表达式在文本框中仅允许一个点

jQuery中的正则表达式仅允许一个匹配项

正则表达式只允许一个特殊字符并排除其他字符

正则表达式以检测仅包含(至少一个)字母和特殊字符的字符串

将正则表达式匹配到下一个特殊字符,同时允许空格

如何在正则表达式中允许一个换行符?

Python正则表达式:如何仅增加一个数字在字符串中?

如何在REGEX表达式的中间包含一个完全不包含的子字符串?

如何在Guile Scheme中一次仅读取一个表达式

如何在特殊字符和第二个字符的第一个匹配之间找到正则表达式匹配?

如何在C#正则表达式中仅包含一个定界符?

正则表达式 - 名称中只允许一个空格和一个连字符

Python RegEx-如何形成一个在单词中包含连字符的正则表达式

Java 正则表达式至少需要一个字母和一个数字。还允许任何特殊字符

如何在Notepad ++中从正则表达式搜索中替换一个字符

正则表达式-如何在两个字符或仅一个字符之间获取字符串?

用于检查字符串中是否存在一个或多个特殊字符的正则表达式

如何在正则表达式中包含点作为最后一个字符?

如何在每次更改的正则表达式中添加一个字符?

我如何在这个正则表达式中自己编写一个转义字符?

如何在正则表达式中的下一个特定字符处停止

如何在另一个进程的内存中通过正则表达式搜索字符串?

正则表达式只允许给定字符类中的一个(可能重复)字符

如何在Java正则表达式中表示一个空字符类

简单示例:仅允许将表达式作为管道的第一个元素