2012-04-05 6 views
1

私が何を望んでいるか見るには、私が使っている正規表現を見てください。私は英語で説明しようとします。 4444または444444444または444-44-4444と一致させたいと思います。 ここに私が持っているものがあり、それは私が欲しいものをします。SSNのさまざまなフォーマットにマッチするクリーンなRegExソリューションを探してください

^[0-9]{9}$|^[0-9]{4}$|^[0-9]{3}-[0-9]{2}-[0-9]{4}$ 

ORを使用せずに行う方法はありますか?私はこれをやろうと考えていましたが、除外したいと思っている222-222222が許されています。

+0

「4444」は有効なSSNですか? – alan

+1

どのような正規表現の実装を使用していますか? grep? JavaScript? Python? perl? – alan

+0

あなたは[これらの](http://regexlib.com/Search.aspx?k=ssn&AspxAutoDetectCookieSupport=1)を見ましたか? SSNにいくつかの余分な制約があるようです。任意のサブセクションのすべてのゼロ、666などで始まるSSNを許可しないようにすることができます。 –

答えて

1

あなたは後方参照でこれを行うことができるはず:-が存在する

^(?:\d{3}(-?)\d{2}\1)?\d{4}$ 

場合は、それが捕獲され、\1で参照することができます。存在しない場合、\1は空になります。したがって、本質的には:-がその位置にある場合、それは他の位置にもなければなりません。それが有効なSSN番号の米国仕様と一致しないため、実際の答えとしてマーク

DEMO

+1

Felix-Kling( '@'修飾子は機能しません) '^(?:\ d {3}( - ?)\ d {2} \ 1)?\ d {4} $'つまり、 '( - )?'の代わりに '( - ?)'と書かれています。 – alan

+0

面白い...どの言語をチェックしましたか?それはJavaScriptの私のために働いた。しかし、それについて考えてみると、それは意味をなさない... –

+0

これはPythonではうまくいかなかった。私はテキストエディタを持っていますが、私はPerlの正規表現の実装を使用していると思います。どちらでもうまくいきませんでした。しかし、括弧内の '? 'を動かすと、両方でうまくいきました。 (別のトピック:コメントに '@'を打つと、あなたのユーザ名がポップアップしないように '@Felix Kling'を挿入することができます。スペースの可能性がありますか?それを回避する方法は分かりますか?) – alan

0

パターンが失敗しました!このパターンが動作し、私は私のブログの記事Regular Expression (Regex) Match Invalidator (?!) in .Netにマッチ無効化の使用を記載している政府の仕様Social Security Number Randomization

# To use this regex pattern specify IgnoreWhiteSpace due to these comments. 
^       # Beginning of line anchor  
(?!9)      # Can't be 900- 999         
(?!000)      # If it starts with 000 its bad (STOP MATCH!) 
(?!666)      # If it starts with 666 its bad (STOP MATCH!) 
(?<FIRST>\d{3})    # Match the First three digits and place into First named capture group 
(?:[\s\-]?)     # Match but don't capture a possible space or dash 
(?<SECOND>\d\d)    # Match next two digits 
(?:[\s-]?)     # Match but don't capture a possible space or dash 
(?<THIRD>\d{4})    # Match the final for digits 
$       # EOL anchor 

ごとに9XXで始まり000および666または数字をスロー無効化の一致を使用して

関連する問題