0

電話番号の正規表現を実行しようとしています。名前付きキャプチャを使用しているので、私の正規表現がもう少し理解しやすいものになることを願っています。

^(?<country_code>1|808)?(?<area_code>\d{3})?(?<local_number>\d{7})$

次のことを前提とします。

  • 市外局番はすべて3桁です
  • ローカル番号はすべて 7 桁です
  • 国コードは 1 と 808 の 2 つだけです。

テスト:

  • 12025551212<-- 1 202 5551212
  • 2025551212<-- 202 5551212
  • 8082025551212<-- 808 202 5551212
  • 8085551212<--ここで問題

最後のテストの問題は、正規表現が808を国コードと見なすことです。とはいえ、この文字列の は808市外局番を表しています。808 が国コードではなく市外局番として解釈されるようにするには、正規表現をどのように変更すればよいですか?

4

5 に答える 5

2

これらの制約がある場合、正規表現を調整して、国コードを市外局番と組み合わせる必要があります。変更されたビットを強調表示しました。

^(?:(?<country_code>1|808)?(?<area_code>\d{3}))?(?<local_number>\d{7})$
 ^^^                                          ^^

国コードと市外局番の周りに非キャプチャ グループがあり、そのグループが存在する場合は市外局番グループが必要です。

そうは言っても、あなたが取っているアプローチは、より一般的には機能しません。3 桁の市外局番と 7 桁の市内番号は、すべての国で使用されているわけではありません。実際、すべての国で市外局番が使用されているわけではありません。(たとえば、グリーンランドの人口は約 56,000 人しかいないため、グリーンランドの電話番号は市外局番なしの 6 桁です。)

于 2013-04-18T22:43:33.327 に答える
0
^(?:(?<country_code>1|808)?(?<area_code>\d{3}))?(?<local_number>\d{7})$
于 2013-04-18T22:42:48.030 に答える
0

次のような先読みを使用します。

^(?<country_code>1|808(?=\d{10}))?(?<area_code>\d{3})?(?<local_number>\d{7})$

これにより、国コードの後に​​常に 10 桁が表示されるようになります。

ライブデモ: http://www.rubular.com/r/SnPE3eyB3E

于 2013-04-18T22:42:55.010 に答える