Actions

正規表現

From LimeSurvey Manual

This page is a translated version of the page Using regular expressions and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎français • ‎日本語 • ‎Nederlands

Contents

正規表現は始めと終わりがスラッシュ("/")でなければなりません。http://www.regexlib.net/に正規表現の事例集があります。スラッシュで挟まれたものはほぼすべて機能します。

こちらの正規表現テスターで自作の正規表現をテストすることができます。

Help.pngこのウィキセクションを改善するため、新しい(潜在的な)LimeSurveyユーザーがこの機能をより良く理解できるよう、動作確認した正規表現を追加してください。
Important.png
以下の例は、すべて1行で記述してください。 : {{{1}}}


重要: 条件における正規表現

条件エディターで正規表現を使用する場合は、前後のスラッシュを含めないでください。


メールアドレスの検証

更新(2018/12): 最近のドメイン名では、“ü”のような特殊文字だけでなく、.techや.companyのような3文字以上の(トップレベル)ドメイン名が使えるため、下記の電子メール正規表現では、入力された電子メールアドレスに“@”および“.”が含まれるかどうかだけをチェックします。

/^.+?@.+?\..+$/

下記の古いドメイン名の正規表現では、(トップレベル)ドメイン名が最大3文字に限られているため、すべてのドメイン名をカバーできません。

/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/

郵便番号

オーストラリアの郵便番号

/^[0-9]{4}/

ブラジルの郵便番号

/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/

カナダの郵便番号

/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/

アメリカの郵便番号

/^[0-9]{5}([- /]?[0-9]{4})?$/

ゼロで始まる郵便番号は、次のようにします。

/^[0-9]{5}(?:-[0-9]{4})?$/

イギリスの郵便番号

/^[A-Z][A-Z]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i

この表現は厳密には正確ではなく、実際の検証はもっと複雑です。詳細は、StackOverflow answerWikipediaなどを参照してください。

フランスの郵便番号

/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/

上記の表現は非常に正確であり、最初の2桁で海外県・海外領土を含むフランスの行政区画が存在するかどうかをチェックします。


電話番号

アメリカの電話番号

/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/

または

/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/

二つ目の例は、数字以外の記号を含むカナダとアメリカの電話番号用です。

 . ( ) - (space)

この表現では、次のような電話番号にもマッチします。

  • (555)555 5555
  • 555.555.5555
  • 555 555 5555
  • (555)-555-5555
  • 555-555-5555
  • 555555555

オーストラリアの電話番号

次のパターンは、"+61"の国コードを含む、オーストラリアのすべての携帯・固定の電話番号にマッチします。

  • (02) 9123 6535
  • 03 1234-5345
  • 0412 345 678
  • +61 2 3456 789

以下のものにはマッチしません。

  • 234 3450 234
  • a234 534 3432
  • 134567
  • 123456789013

括弧、スペース、ハイフンは無視されます。

次に挙げる'正確版'は、最初の4ないし5桁が有効なオーストラリアの電話番号であることを確認します。

'簡易版'では、最初の2桁しか見ていないため、無効な番号にもマッチします。

すべてのオーストラリアの電話番号(携帯・固定、市外局番込み)

正確版:

/^\(?(?:\+?61|0)(?:(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}|4\)?[ -]?(?:(?:[01][ -]?[0-9]|2[ -]?[0-57-9]|3[ -]?[1-9]|4[ -]?[7-9]|5[ -]?[018])[ -]?[0-9]|3[ -]?0[ -]?[0-5])(?:[ -]?[0-9]){5})$/

簡易版:

/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/

すべてのオーストラリアの電話番号(固定のみ、市外局番含む)

正確版:

/^\(?(?:\+?61|0)(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}$/

簡易版:

/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/

ニューサウスウェールズの固定電話番号(市外局番は省略可)

正確版:

/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/

簡易版:

/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/

ビクトリア、タスマニアの固定電話番号(市外局番省略可)

正確版:

/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/

簡易版:

/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/

クイーンズランドの固定電話番号(市外局番は省略可)

正確版:

/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/

簡易版:

/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/

南オーストラリア、北部準州、西オーストラリアの固定電話番号(市外局番は省略可)

正確版:

/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/

簡易版:

/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/

オーストラリアの携帯電話番号

正確版:

/^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$/

簡易版:

/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/

ベルギーの電話番号

/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/

ベルギーの携帯電話番号

/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/

フランスの電話番号

/^((\+|00)33\s?|0)[1-5](\s?\d{2}){4}$/

フランスの携帯電話番号

/^((\+|00)33\s?|0)[679](\s?\d{2}){4}$/

ルクセンブルクの電話番号

/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/

ルクセンブルクの携帯電話番号

/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/

ドイツマルク(正負記号付きも可)

/^[1-6]{1}[\+|\-]?$/

年齢の検証

例: 20-99歳

/([2-9][0-9])/


年齢の検証

例: 20-99歳

/([2-9][0-9])/

例: 18-35歳

/(1[8-9]|2[0-9]|3[0-5])/

例: 19-65歳

/^(1[8-9]|[2-5][0-9]|6[0-5])$/


数値の検証

数値の検証

1から99999までの数値

/^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])$/
/^[1-9][0-9]{0,4}$/ も同じですが、少し早く動作します

1から999、1.000から999.999、999.999.999まで

/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/

1から999、1.000から999.999、999.999.999までにマッチしますが、999.1.1、94.22.22、999.1.22、999.11.1、999.1.333といったものにはマッチしません。

小数点込みの数値の検証(価格向け)

0から199(小数点以下2桁があっても可)にマッチさせる例。

/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/

千の桁区切りを使用した数値検証

スペースを区切り文字とし、負の数でない場合、

/^(?!0)\d{1,3}(\ \d{3})*$/

ピリオドを区切り文字とし、負の数を含める場合。

/^-?(?!0)\d{1,3}(\.\d{3})*$/

小数点以下2桁が必須で、3桁ずつのカンマ区切り(省略可)があり、1.00から999,999,999.00までにマッチさせる例。1.00、1,000.00、12,345.67、12345,02、123,456,468.00、1234566.00、123456789.00にマッチし、1,23.00、12,3.4、1234,43.04にはマッチしない。

/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/

上記に似た例: 小数点以下2桁が必須で、桁区切り","の前に"0"を許容する例。

/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/

上記と同様で、小数点以下を省略可とする例:

/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/

月(1-12)

誕生した月に関する質問の回答を検証する場合:

/^[0]*[1-9]$|^[0]*1[0-2]$/

最小の桁数(下記の例では3桁以上)

/^.{3,}$/


通貨

アメリカの通貨($記号、セント)

/^\$?\d+(\.(\d{2}))?$/

カンマを使用する場合:

/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/

スイスの価格表示

小数点以下に2桁あり、小数点以下第2位の桁が0か5となる数値:

/^(\d+)(\.\d(05)?)?$/


点数の検証

1から10

/^[1-9]{1}$|^10$/

1から100

/^[1-9]?[0-9]{1}$|^100$/


テキストの検証

現在、自由回答(短い・複数)質問タイプでは、最小値・最大値はサポートしていません。別のやり方として、正規表現つきで自由回答(長い)質問タイプを使用する方法があります。

次の例は、1行に1単語あり、少なくとも3行、多くとも10行であることをテストします。

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is

1行あたり5単語にしたい場合は、最初と最後のアスタリスクを{4,}に置き換えます。

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is

1行目から5行目まで、各行に1単語以上あるようにしたい場合は、最後の中括弧の中身を0,4に変更します(最初の行ですでにマッチしているので0を使います)。

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is

ワード数

以下の例では、許容される単語の数を最小1と最大200に制限しています。
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
最小値を増やしたいときは、{0,199}のゼロの部分を変更します。

最大値を増減したいときは、{0,199}の199の部分を変更します。

時刻の検証

時刻を記述する方法はいくつかあります。例えば、12時間か24時間か、秒ありか秒なしです。日付質問タイプ(現在の時刻を取得することもできます)を使用するほか、"自由回答(短い)"質問タイプを使用し、以下の正規表現のいずれかで検証することもできます。

次の3つの検証文字列は、24時間表示の時刻をテストするもので、(出現順に)秒なし、秒任意、秒必須の例です。

/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/

次の3つは12時間表示の時刻にマッチし、上記と同様、秒なし、秒任意、秒必須の例です。

/^(?">00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))$/
/^(?:00:[0-5][0-9](?::[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?::[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?::[0-5][0-9])? (?:pm|PM))$/
/^(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))$/

次の3つは12または24時間表示の時刻にマッチし、上記と同様、秒なし、秒任意、秒必須の例です。

/^(?:(?:00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9])$/
/^(?:(?:00:[0-5][0-9](?[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?[0-5][0-9])? (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9](?[0-5][0-9])?)$/
/^(?:(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])$/

アメリカの州

以下は、州の検証の例(テキサス州)です。

  • TX(大文字のみ) =
    /^(TX)$/
    
  • tx(小文字のみ) =
    /^(tx)$/
    
  • TX(大文字または小文字) =
    /^([T|t][X|x])$/
    


不適切語フィルター

不適切な単語を回答からフィルターする方法です。

/^(?i)((?!\b不適切語\b).)*$(?-i)/

上記の"不適切語"の部分を適宜変更します。

\bをつけると、"ass"や"hell"を不適切語としている場合に、"assassination"や"hello"を許可します。これは、他の単語や名前を回答から取り除く場合にも機能します。


参考リンク

このウィキセクションの冒頭で、https://regex101.com/を使って正規表現をテスト/作成することをお勧めしています。このサイトに不満がある場合は、https://www.regextester.com/を使用して式を作成することもできます。