2012-04-10 9 views
0
"^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4})|((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{5})|((\+44\s?\d{5}|\(?0\d{5}\)?)\s?\d{5})|((\+44\s?\d{5}|\(?0\d{5}\)?)\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$"; 

私は上記のパターンを使用して英国の電話番号を検証します。 JavaScript(クライアント側)で動作しています。 Javaコード(サーバー側)では動作しません。 エラーメッセージにはinvalid escape sequenceと表示されます。JavaScriptの正規表現がJavaで動作しない

+0

お気に入りの見積もりをここに配備します - 「あなたはあなたの問題を解決する正規表現が必要だと思うので、あなたはそれを書いてください。今は2つの問題があります。ポイントは、おそらくregexesがこれを大きくて醜いものにするとき、あなたの問題を別の方法で解決する時を見てみましょう。 – Jon

答えて

6

\\\ と置き換える必要があると言われていますが、あなたの正規表現は電話番号にとっては少し複雑なようですね。

^(\+44)?(...) 

そして省略記号正規表現の残りの部分:私はGB(44)の国別コードがかなりの数回を含め、私はあなたが一度だけと言うことができるかもしれないと思いますされていることがわかり あります。このコードは維持するためにはるかに簡単になります私の意見では

if (matches case 1) return true; // example of case one 
if (matches case 2) return true; // example of case two 
if (matches case 3) return true; // example of case tree 
... 
return false; 

:この明確には以下のように各ケースのためにいくつかのものに、この正規表現を破るためにあるようにする

もう一つのアイデア。

3

これは、Javaが単に\を文字列に受け入れないためです(\はエスケープされていないため)。代わりに\をエスケープ\\としてください。

関連する問題