问题描述
尝试在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 @
解决方法
听起来像您在寻找这样的东西:
^[^@]?[A-Za-z0-9]+@[A-Za-z0-9]+[^@]?$
但是,正如注释中已经提到的那样,您的最后两个“通过”输入与您的规则不匹配-#!@#1a!#a
在@
之前缺少字母数字字符,并且在其中包含非字母数字字符除第一个和最后一个字符外的其他位置。 1@dasdas2!#
的末尾有两个符号,但是规则将规定!
无效,因为它不是字母数字。
请注意,根据区域设置,“字母数字”可能表示不同的含义。在上面,我将其字面理解为A-Z,a-z和0-9,但是那里还有许多其他字符是“字母”或“数字”。如果您的regex变体(未指定变体)支持\w
,则可能是更好的替代方法,但是通常,\w
还可以使用下划线(_
)。如果这个过程不是“字母数字”,那么您就需要前瞻性的断言来禁止_
(这又是特定于变量的,因为正则表达式尚未在各个实现中完全标准化)。>