簡體   English   中英

如何使用3個字符和3個數字進行正則表達式?

[英]How to make regular expression with only 3 characters and 3 digits?

我在這里嘗試了以下正則表達式匹配http://rubular.com/但它一次只匹配3個字符或3個數字。

^((\d{3})|(\w{3}))$

我需要這樣的結果:

123eee

4r43fs

干得好:

^(?=(?:[a-z]*\d){3})(?=(?:\d*[a-z]){3})\w{6}$

http://regex101.com/r/hO5jY9

如果至少有三個數字,至少三個字母,最多六個字符,則該字符串必須匹配。

這是如何運作的?

  1. 這是一個經典的密碼驗證風格的正則表達式。
  2. 兩個前瞻檢查我們至少有三位數字和至少三個字母
  3. 在這些斷言之后,我們可以自由地將任何6個字符與\\w{6}匹配,直到字符串結束

前瞻

讓我們分解第一個前瞻: (?=(?:[az]*\\d){3})

它斷言三次( {3} ),在字符串中的這個位置,這是由^斷言的字符串的開頭,我們能夠匹配任意數量的字母,后跟一個數字。 這意味着必須至少有三位數。

一個前瞻應該足以檢查,如果有正好3位數:

^(?=\D*(?:\d\D*){3}$)[^\W_]{6}$

使用[^\\W_]作為[A-Za-z0-9]簡寫。

在regex101上測試

如果你想使用正則表達式,它是非常復雜的:

^(?=.*\d.*\d.*\d)(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z]).{6}$

在Regexr上看到它

這將做你想要的。

  1. \\w不是你想要的,它還包括\\d和下划線“_”。

  2. (?=.*\\d.*\\d.*\\d)是一個正向前瞻斷言,用於檢查字符串中三位數的條件。

  3. (?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z])是一個正向先行斷言,用於檢查字符串中三個字母的狀態。

  4. .{6}檢查總長度為6

function checker(data) {
    var splitted = data.split(/\d/);
    if (splitted.length === 4) {
        return splitted.join("").split(/[a-zA-Z]/).length === 4;
    }
    return false;
}

console.assert(checker("123eee") === true);
console.assert(checker("4r43fs") === true);
console.assert(checker("abcd12") === false);
console.assert(checker("4444ab") === false);
console.assert(checker("ab1c")   === false);
console.assert(checker("444_ab") === false);

如果您只想匹配任何六個字符的數字組合和“單詞字符”,請使用:

/^[\d\w]{6}$/

嗨,我們可以用兩種方式做到這一點。

如果你需要IE7支持“?”表達式會給出一些問題。所以你可以檢查如下。

[\d\w]{6} && ![\d]{6} && ![\w]{6}
  1. 檢查組合

  2. 只檢查數字

  3. 只檢查字母。

暫無
暫無

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

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