簡體   English   中英

javascript 正則表達式測試僅適用於 6 位數字。 逗號分隔

[英]javascript regular expression test for 6 digit numbers only. comma seperated

所以這必須通過:

454555, 939999 , 019999    ,727663

它適用於輸入 6 位發票編號的用戶。 如果數字是 5 或 7 位而不是 6 1234567, 123456它應該會失敗。所以1234567, 123456應該會失敗,因為一組超過 6 個數字。

到目前為止我有:

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

唯一的缺點是它接受 7 位或更多位數字。 無法弄清楚此時是否可以同時執行這兩項操作,測試由逗號和一個或多個空格分隔的 6 位數字,並且所有數字必須只有 6 位,如果不是,則失敗。

任何幫助表示贊賞。 正則表達式不是我的強項。

謝謝

諾曼

您可以像下面的函數一樣使用正則表達式編寫它。

const isPassword = (password: string) => /^\d{6}$/gm.test(password);

這是下面的示例測試文件。

  test('should recognize a valid password', () => {
    expect(isPassword('123456')).toBe(true);
    expect(isPassword('000000')).toBe(true);
  });

  test('should recognize an invalid password', () => {
    expect(isPassword('asdasda1234')).toBe(false);
    expect(isPassword('1234567')).toBe(false);
    expect(isPassword('a123456a')).toBe(false);
    expect(isPassword('11.11.11')).toBe(false);
    expect(isPassword('aaaaaa')).toBe(false);
    expect(isPassword('eeeeee')).toBe(false);
    expect(isPassword('......')).toBe(false);
    expect(isPassword('werwerwerwr')).toBe(false);
  });

您的正則表達式沒有連續匹配7位數字,但它也沒有強制要求匹配整個字符串。 它只需要匹配字符串中的一些子字符串,所以它也會匹配這些中的每一個:

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

只需添加字符串的開頭 ( ^ ) 和字符串的結尾 ( $ ) 錨點以強制整個字符串匹配,它就會正常工作:

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

另請注意, ,*,可以縮寫為,+ ,如果您只想要一行中的一個逗號,只需使用, ,而不是,*,+

您還可以用\\d替換[0-9]

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

為了驗證完整的字符串,您可以使用此正則表達式。

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

它僅適用於六位數字,您必須輸入至少一個 6 位數字。 如果您有一個帶空格的尾隨逗號,它也適用。

它接受超過六位數的數字,因為您沒有錨定文本,並且出於某些奇怪的原因,您可以選擇重復逗號。 嘗試這樣的事情:

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

另請注意, [0-9]等價於\\d ,因此可以更簡潔地重寫為:

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

僅使用正則表達式:

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

這說:

  • ^ - 從字符串的開頭開始
  • (?:…)* - 找到以下零個或多個:
    • \\d{6} - 六位數
    • \\s* - 也許是一些空格
    • , - 文字逗號
    • \\s* - 也許是一些空格
  • \\d{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;
}

沒有任何真正需要正則表達式。 將輸入限制為僅 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>

我在這里看到了很多復雜性。 聽起來你想要的東西很簡單:

/^(\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 控制台中測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM