2016-06-29 1 views
-1

正規表現私たちはルールを次ているの検証に遭遇した

最初の文字は常に「0」または「46」または「0046」

でなければなりません万一

ブロック下記数、

(0900x、+ 46900x、0046900x)(+ている場合を含む)20から8までの間の長さです。

(0939x、+ 46939x、0046939x)。

(0944x、+ 46944x、0046944x)。

(099x、+ 4699x、00469x)。

正規表現の作成を手伝ってもらえますか?https://regex101.com/で作成してテストしましたが、作成するのはかなり難しいです。

答えて

0

私はそれが国コードのチェックや0の前にして、市外局番の4つの組み合わせによって開始さ最も簡単な方法は、

^(?:0|\+46|0046)(?:900|939|944|99) 

だろうと思います。

Check it out here at regex101

編集

あなたがルールに一致する数字ないをしたい場合は、負の先読みと同じことを試すことができます:

^(?!(?:0|\+46|0046)(?:900|939|944|99)).* 

See this one here

または負の先読みなし:

^(?:[^0+]|0[^09]|\+[^4]|\+4[^6]|(?:\+46[^9])|(?:0046[^9])).*$ 

and this one here

編集2

OKは、ここで我々は再び行く;)

これはタフな1であることが判明しました。しかし、ここで私達は行く:

^(?=.{8,20}$)(?>\+46|0046|0(?!0))(?!900|939|944|99)\+?\d* 
  • 長さを主張するために初めに正の先読みを追加し
  • 正しい国コードと一致する原子群を使用 - ない別のダブルゼロ00を許可します
  • 料金所番号を許可しないためのネガティブなルックアヘッド。

桁数を変更できるように変更されています(冒頭のオプション+)。

See this one here

+0

は、コンテンツが "0"または "+46"または "0046"で始まり、その後900,939,944,99のブロックを持つことを許可するには、実際には単一の式が必要です。 004690、00469391234、00469441234、0046991234などの場合は、数字が0または+46の場合は一致しないはずです。 –

+0

ネガをテストしたいのですか?あなたの正規表現フレーバーが負のルックアヘッドをサポートしている場合、 '^(?:0 | \ +46 | 0046)(?:900 | 939 | 944 | 99))。*'を試してください。 [こちらをご覧ください](https://regex101.com/r/qC6gK2/3)。 – ClasG

+0

いくつかのシナリオで動作するように見えるので、長さは8〜20文字で、0または+46または0046で始める必要があります。^(?:0 | \ +46 | 0046) (?:900 | 939 | 944 | 99))[+ | \ d] {8,20}しかし、それは123456789を渡しました。 –

関連する問題