2009-06-19 9 views
0

これはテキストボックスの検証用です。私は、ドメインドメインリストの正規表現はどのように作成しますか?

MATCHES

google.com、msn.com、texas.edu.gov.us

msn.com

のリストに一致する必要はNON- MATCHES

google.com、msn.com、

@ msn.com、@ google.com

末尾のカンマなし[email protected]

(それは私が立ち往生よどこだ)これは私がこれまで持っているものである

しかし、カンマ区切りの部分が右に動作していない:それは私には思える

^([([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}]+\s*)+,$ 

答えて

2

「何人かの人々を、に直面したとき:あなたドメインのリストを一致させるために、以下のモンスターを使用することができます上記の私の例の正規表現に基づいて、最初の文字列を分割に関するものを無視

、 "私が知っている、私は正規表現を使用します"と思う今、彼らは2つの問題があります。 - Jamie Zawinski

ここにあなたが望むことをする正規表現があります。ドメインのコンマで区切られたリストを処理し、ドメイン名に違法な文字がないことを確認し、ドメイン名の長さを強制する(私はそれが61ではないと思ったが、61を持っていたので、私はそれを残した。)

(a-zA-Z0-9)[a-zA-Z0-9-] {0,61} [a-zA-Z0-9]δ(a-zA-Z0-9 (a-zA-Z0-9)[a-zA-Z0-9-] {0,61} [a-zA-Z0] (\ [a-zA-Z0-9] {2,6})+)$

※注:[\ w]の代わりに[a-zA-Z0-9]を使用しています。 \ wに含まれていますが、ドメイン名には使用できません

2

方が良い\s*,\s*最初のような正規表現でバラバラに文字列を分割して、別々に各ドメインを検証したいです。後でロジックを変更しようとすると、すべてを1つの正規表現にプッシュしようとすると、あなたの人生は難しくなります。

あなたが持っている正規表現を検証するドメインが動作するはずです。意図的にいくつかの有効なドメインを許可していないかどうかはわかりません。より一般的なドメインマッチング正規表現は次のようになります。

^[\w-]+(\.[\w-]+)+$ 

しかし、たとえこの1は、またはあなたのケースでは許可してもしなくてもよい、localhostを禁止します。それは他の点では仕様にはあまりにも緩いです。オプションで、それぞれの[\w-]+[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]?に置き換えて、より厳密で難読化してください。の場合でも、は仕様に従って無効な数字のみのレコードを無効にしません。どのくらい正確にする必要がありますか?

^\s*([\w-]+(\.[\w-]+)+\s*,\s*)*[\w-]+(\.[\w-]+)+\s*$ 
関連する問題