2009-08-29 2 views
3

今の私は、この正規表現を使用しています:jabber idを検証する正規表現とは何ですか?

^\A([a-z0-9\.\-_\+]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z$ 

私はそれが非常に良好ではないと思います。では、あなたはjidを検証するために見た、または見たことのある最も良い正規表現は何ですか?参考のため

Section 3 of the XMPP core standardはクイック検索から

jid    = [ node "@" ] domain [ "/" resource ] 
domain   = fqdn/address-literal 
fqdn   = (sub-domain 1*("." sub-domain)) 
sub-domain  = (internationalized domain label) 
address-literal = IPv4address/IPv6address 
+2

あなたが法的ジャバーIDを構成するルールを提供している場合には参考になります。 – Pinochle

+0

ire_and_cursesはすでに私の監視を修正しました。ありがとうございます。 –

+1

あなたはあなたがどれくらい頼んでいるのか分かりません。このタスクは非常に複雑で正規表現にはあまり適していない電子メールアドレスの検証に非常に似ています。これをチェックしてください:http://www.regular-expressions.info/email.html –

答えて

5

あなたの正規表現は、次のように、少なくとも間違っていますポイント:

  1. これは、 '@'を含む必要があります。 '@'のないgidも有効です。
  2. それは最大の長さをチェックしません(しかし、あなたが提供されるリンクは「JIDの各許容部分の長さが以上1023バイト以下でなければなりません」と言う)

私は1つの巨大な正規表現を持つことがAだと思います間違った方法。 jidを小さな部分(ドメイン、ノード、リソース)に分割し、それぞれの部分をチェックすることでコードを書くほうがよいでしょう。すなわち、複数のポイントから良いだろう:

  • 容易試験(することができます独立して部品の各ユニットテスト)
  • 良好な性能
  • 単純コード
  • 再利用
+0

チップをありがとう。 –

7

これを試してみてください:

^(?:([^@/<>'\"]+)@)?([^@/<>'\"]+)(?:/([^<>'\"]*))?$ 

有効でたJIDではありませんそれと一致し、物事の多くは、特にドメイン名部分には、がありますので、それは、かなり右ではありません。ただし、すべての有効な JIDを許可し、解析する必要があります。グループ1がノード、グループ2がドメイン、グループ3がリソースです。


試験データ:脇

foo     (None, 'foo', None) 
[email protected]  ('foo', 'example.com', None) 
[email protected]/bar ('foo', 'example.com', 'bar') 
example.com/bar  (None, 'example.com', 'bar') 
example.com/[email protected] (None, 'example.com', '[email protected]') 
example.com/bar/baz (None, 'example.com', 'bar/baz') 
bä[email protected]ämple.com/bäz ('bär', 'exämple.com', 'bäz') 

:あなたは、構造に精通していない場合(:)、それがグループを追加しない括弧のセットですか?出力。

関連する問題