首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证jabber id的正则表达式是什么?

验证jabber id的正则表达式是什么?
EN

Stack Overflow用户
提问于 2009-08-29 10:09:43
回答 3查看 2.9K关注 0票数 4

现在,我使用这个regexp:

代码语言:javascript
复制
^\A([a-z0-9\.\-_\+]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z$

我认为它不是很好。那么用来验证jids的最好的正则表达式是什么呢?

作为参考,Section 3 of the XMPP core standard将增强的巴科斯-诺尔形式的JID定义为

代码语言:javascript
复制
jid             = [ node "@" ] domain [ "/" resource ]
domain          = fqdn / address-literal
fqdn            = (sub-domain 1*("." sub-domain))
sub-domain      = (internationalized domain label)
address-literal = IPv4address / IPv6address
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-31 11:36:49

您的regexp至少在以下几点是错误的:

  1. 它要求jid包含'@',但没有'@‘的JID也可能有效。
  2. 它不检查最大长度(但您提供的链接显示“JID的每个允许部分的长度不得超过1023个字节”)

我认为拥有一个巨大的正则表达式是错误的。你最好写一些更多的代码,将jid分成更小的部分(域、节点、资源),然后检查每个部分。从多个角度来看,这会更好:

  • 更容易测试(您可以对每个部件independently)
  • better performance
  • simpler code
  • reusability
  • etc.

进行单元测试

票数 6
EN

Stack Overflow用户

发布于 2009-09-10 16:04:23

试试这个:

代码语言:javascript
复制
^(?:([^@/<>'\"]+)@)?([^@/<>'\"]+)(?:/([^<>'\"]*))?$

这不是很正确,因为有很多匹配它的东西都不是有效的JID,特别是在域名部分。但是,它应该允许并解析所有有效的JID,其中组1是节点,组2是域,组3是资源。

测试数据:

代码语言:javascript
复制
foo                 (None,  'foo', None)
foo@example.com     ('foo', 'example.com', None)
foo@example.com/bar ('foo', 'example.com', 'bar')
example.com/bar     (None,  'example.com', 'bar')
example.com/bar@baz (None,  'example.com', 'bar@baz')
example.com/bar/baz (None,  'example.com', 'bar/baz')
bär@exämple.com/bäz ('bär', 'exämple.com', 'bäz')

旁白:如果您不熟悉这个结构(?:),那么它是一组不会向输出中添加组的括号。

票数 7
EN

Stack Overflow用户

发布于 2009-08-29 15:08:40

通过快速搜索,请参阅:

http://jdconley.com/blog/archive/2007/03/13/validating-jabberid-nodes-xmppsoapbox-user-names.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1351041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档