3

したがって、これは合格する必要があります:

454555, 939999 , 019999    ,727663

ユーザーが 6 桁の請求書番号を入力するためのものです。数字が 6 桁ではなく 5 桁または 7 桁の場合は失敗する1234567, 123456はずです。

これまでのところ、私は持っています:

[0-9]{6}(\s*,*,\s*[0-9]{6})*

唯一の欠点は、7 桁以上の数字を受け入れることです。この時点で、コンマと 1 つ以上のスペースで区切られた 6 桁をテストすることさえ可能かどうかを判断できません。すべての桁は 6 桁のみである必要があり、そうでない場合は失敗します。

助けていただければ幸いです。正規表現は私の得意ではありません。

ありがとう

ノーマン

4

7 に答える 7

2

あなたの正規表現7は行の数字と一致しませんが、文字列全体と一致することも強制しません。文字列内の一部の部分文字列に一致する必要があるだけなので、これらのそれぞれにも一致します。

"1234512345612345612345"
"NaNaNaN  123456,    123456 BOOO!"
"!@#$%^&*({123456})*&^%$#@!"

^文字列の開始 ( ) と文字列の終了 ( ) アンカーを追加するだけで、文字$列全体が一致するようになり、正しく機能します。

^[0-9]{6}(\s*,*,\s*[0-9]{6})*$

,*,また、は に短縮できることにも注意してください。,+行にコンマが 1 つだけ必要な場合は、 or,ではなくを使用してください。,*,+

次のように置き換えることもでき[0-9]ます\d

^\d{6}(\s*,\s*\d{6})*$
于 2013-08-30T15:23:22.437 に答える
2

完全な文字列を検証するには、この正規表現を使用できます。

^(\s*\d{6}\s*)(,\s*\d{6}\s*)*,?\s*$

6 桁のみで機能し、少なくとも 1 つの 6 桁の数字を入力する必要があります。空白を含む末尾のコンマがある場合にも機能します。

于 2013-08-30T15:25:11.493 に答える
2

テキストを固定していないため、6 桁を超える数字を受け入れています。また、何らかの奇妙な理由で、必要に応じてコンマを繰り返しています。次のようなことを試してください:

^[0-9]{6}(?:\s*,\s*[0-9]{6})*$

また、[0-9]は と同等であることに注意してください\d。したがって、これは次のようにより簡潔に書き直すことができます。

^\d{6}(?:\s*,\s*\d{6})*$
于 2013-08-30T15:22:17.783 に答える
0

正規表現のみを使用:

var commaSeparatedSixDigits = /^(?:\d{6}\s*,\s*)*\d{6}$/;
if (myInput.test(commaSeparatedSixDigits)) console.log( "Is good!" );

これは言います:

  • ^- 文字列の先頭から開始
  • (?:…)*- 次のうち 0 個以上を検索します。
    • \d{6}- 6桁
    • \s*- 多分いくつかの空白
    • ,- リテラル コンマ
    • \s*- 多分いくつかの空白
  • \d{6}- 続いて 6 桁
  • $- 文字列の終わりが続きます

または:

var commaSeparatedSixDigits = /^\s*\d{6}(?:\s*,\s*\d{6})*\s*$/;

これについて何が違うのかを解読するための演習として残します。


JavaScript + 正規表現の使用:

function isOnlyCommaSeparatedSixDigitNumbers( str ){
  var parts = srt.split(/\s*,\s*/);
  for (var i=parts.length;i--;){
    // Ensure that each part is exactly six digit characters
    if (! /^\d{6}$/.test(parts[i])) return false;
  }
  return true;
}
于 2013-08-30T15:20:28.160 に答える
0

ここには多くの複雑さが見られます。あなたが望むのはとてもシンプルなように思えます:

/^(\d{6},)*\d{6}$/

次に、空白を説明します。

/^\s*(\d{6}\s*,\s*)*\d{6}\s*$/

しかし、他の人が指摘しているように、これは実際には正規表現を使用せずに JavaScript で非常に単純です。

function check(input) {
    var parts = input.split(',');
    for (var i = 0, n = parts.length; i < n; i++) {
        if (isNaN(+parts[i].trim())) {
            return false;
        }
    }
    return true;
}

Chrome JavaScript コンソールでテスト済み。

于 2013-08-30T15:44:05.597 に答える
0

正規表現は必要ありません。入力を 6 文字のみに制限し、数字のみを受け入れ、入力が 6 桁であることを確認します (ここには表示されません)。したがって、次のものが必要です。

HTML

<input type='text' name='invoice' size='10' maxlength='6' value='' onkeypress='evNumersOnly(event);'>

JavaScript

<script>
function evNumbersOnly( evt ) {
  //---  only accepts numbers
  //--- this handles incompatabilities between browsers
  var theEvent = evt || window.event;
  //--- this handles incompatabilities between browsers
  var key = theEvent.keyCode || theEvent.which;
  //--- convert key number to a letter
  key = String.fromCharCode( key );
  var regex = /[0-9]/;      // Allowable characters 0-9.+-,
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    //--- this prevents the character from being displayed
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}
</script>
于 2013-08-30T15:26:59.570 に答える