正则表达式在中间有 @ 字符
Posted
技术标签:
【中文标题】正则表达式在中间有 @ 字符【英文标题】:Regex having @ character on the middle 【发布时间】:2020-11-30 17:45:02 【问题描述】:尝试在 C# 中创建一个函数来验证字符串是否通过这些规则
@
基本保证中间有@符号
通过
a@a
1@1
a@1
1@a
11@aa
#!@#1a!#a
1@dasdas2!#
失败
1a@! fails because alphanumeric character should be besided @
!@ada fails because alphanumeric character should be besided @
a@a@b fails because has 2 @
a@ fails no character on the right
@b fails no character on the left
@ fails no character beside @
【问题讨论】:
你能展示一下你的尝试吗? 您的描述与您的输入不匹配 @TheGeneral 请详细说明。 当你说“@”以及其他奇怪的东西时,这如何传递#!@#1a!#a
【参考方案1】:
听起来你正在寻找这样的东西:
^[^@]?[A-Za-z0-9]+@[A-Za-z0-9]+[^@]?$
但是,正如 cmets 中已经提到的,您的最后两个“通过”输入与您的规则不匹配 - #!@#1a!#a
在 @
之前缺少字母数字字符,并且在除第一个和最后一个字符。 1@dasdas2!#
末尾有两个符号,但规则规定 !
无效,因为它不是字母数字。
请注意,“字母数字”可能表示不同的含义,具体取决于语言环境。在上面,我按字面意思理解为 A-Z、a-z 和 0-9,但还有许多其他字符是“字母”或“数字”。 \w
可能是更好的替代品,如果您的正则表达式变体支持它(您没有指定变体),但通常,\w
也允许使用下划线 (_
)。如果课程不是“字母数字”,那么您需要前瞻性的断言来禁止_
(同样,这将是特定于变体的,因为正则表达式在实现中并未完全标准化)。
【讨论】:
这似乎不允许点作为符号 它似乎不允许使用符号 1b2!a3@qad11# 这应该可以。 拜伦,这将允许“。”作为我所知道的任何正则表达式变体的符号。并且“1b2!a3@qad11#”不符合您所说的规则,因为“!”符号位于第一部分的中间,而不是字符串的开头或结尾。这是我上面写的测试模式的 URL:regex101.com/r/O7PlFX/1以上是关于正则表达式在中间有 @ 字符的主要内容,如果未能解决你的问题,请参考以下文章
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式