Regex 正则表达式在特定位置没有特殊字符
现在我有:Regex 正则表达式在特定位置没有特殊字符,regex,Regex,现在我有: (?!.*([._-])\1)(?=.*@)[\w.@-]+ 找到test@foo 我想使test不能以特殊字符开头或结尾 例如,我希望它能够找到: tes-t@foo test@-foo 但不是: -test@foo test-@foo -test-@foo 您可以使用^定义不包含特定字符的字符类,例如[^a]将匹配除a之外的任何字符 我会将匹配pre-@单词的正则表达式分成三部分;一个匹配主角,一个匹配中间角色,一个匹配最后一个角色。您还需要处理前一个单词只有一个字符的特
(?!.*([._-])\1)(?=.*@)[\w.@-]+
找到test@foo
我想使test
不能以特殊字符开头或结尾
例如,我希望它能够找到:
tes-t@foo
test@-foo
-test@foo
test-@foo
-test-@foo
^
定义不包含特定字符的字符类,例如[^a]
将匹配除a
之外的任何字符
我会将匹配pre-@单词的正则表达式分成三部分;一个匹配主角,一个匹配中间角色,一个匹配最后一个角色。您还需要处理前一个单词只有一个字符的特殊情况。这不是您应该重新创建控制盘的地方:有太多错误 我不知道你到底想做什么。像
president@whitehouse.gov
和一个普通的邮政局长
可能都可以交付,但不太可能做你想做的事
验证邮件地址的唯一合理方法是将邮件发送到该地址,然后返回一个非自动回复,表明另一端是正确的人。但这无法实时完成。这意味着你能做的最好的事情就是让他们打字两次,以消除打字错误。那帮不了什么忙,真的。这就是为什么在网上注册总是需要协商握手的原因
但是,如果您只需要验证符合RFC 5322的地址,则可以使用
只需了解,测试地址是否符合RFC绝不应与验证该邮件地址混淆,这完全是另一回事。注意,使用正则表达式匹配电子邮件地址是一个坏主意;你不能完全做到这一点,“接近”将拒绝有效的电子邮件。(我知道,我碰巧使用了一封名为
!@mydomain.net
的电子邮件,尽管遭到拒绝,但数量惊人的网站拒绝了它。)如果你坚持这样做,看看谁已经深入研究过这个话题。到目前为止,你做了哪些尝试?在我看来,你只是在说“我想要一个正则表达式来匹配这个”,而没有真正尝试修改或学习正则表达式。你所有的问题都是这样的:“我有这个正则表达式,我希望它与这个匹配,请告诉我如何更改它”,没有任何迹象表明你在学习正则表达式。请先阅读一篇教程(如),并尝试修复您的正则表达式以完成您想要的操作,然后再盲目地来到这里!我无法将“我想让测试不能以特殊字符开始或结束”与“.”匹配。但不是“test-@foo”-它不以特殊字符开始,也不以这样的字符结束…@Maxymtest-
以破折号结束,这显然是一个“特殊字符”。@Phrogz:你是什么意思,不能完全这样做。是的,RFC 5322正则表达式确实通过了你愚蠢的地址,因为它是兼容的,尽管这是不明智的。我不知道如何做到这一点,因为我是正则表达式的新手。@bjacobs:与其尝试破解一个极其复杂的正则表达式,我建议你学习如何编写简单的正则表达式,然后从那里构建所需的正则表达式。