2017-08-22 8 views
1

2つの正規表現をまとめようとしていて、それを理解していません。20文字以上の文字列を持つJavascriptの正規表現

私は英数字のみ

^([a-zA-Z0-9_-]){1,20}$ 

を一致させるために、次のを持っていると私は持っている行に7つの以上の数字を持つ任意の文字列を一致させるために、次の

^\d{8,20}$ 

はどのように操作を行います2つの数字を組み合わせて、英数字を20文字まで入力できます。数字は7文字以上です。

+0

文字列が8桁以上連続しないようにしたいのですか? ['^(?!。* \ d {8})[\ w-] {1,20} $'](https://regex101.com/r/43ujDR/2)を試してください。 –

+0

申し訳ありませんが、私はwiktorのコメントの行に沿って意味しました。私は一貫性のために編集しようとします。 – kshreve

+1

編集後、wiktorの提案で '?!'を '?='に変更してください。 NB:a * digit *がより良い用語になります。 A * number *は、数桁、小数点、...などで構成できます。 – trincot

答えて

1

  • (?=.*\d{8})文字列
  • の開始 - -
    /^(?=.*\d{8})[\w-]{1,20}$/ 
    

    regex demo

    詳細

    • ^を参照してください。改行以外の任意の0+文字が文字の後に8つの連続した数字がなければならない
    • [\w-]{1,20} - 1〜20語の文字(英字、数字または_)またはハイフン
    • $ - 文字列の最後。

    JSのデモ:

    var ss = ["Text_with_1234567", "Text_with_12345678"]; 
     
    var rx = /^(?=.*\d{8})[\w-]{1,20}$/; 
     
    for (var s of ss) { 
     
    console.log(s,"=>",rx.test(s)); 
     
    }

    注:

    • あなたはこれらの8桁以上の文字列の先頭に表示されますを確認するには、.*を削除先読みで
    • 数字が末尾にあることを確認したい場合は、(?=.*\d{8}$)を使用してください。
    関連する問題