簡體   English   中英

RegEx 模式兩個字母或數字后跟數字

[英]RegEx pattern two letters or digits followed by digits

你能幫我建立正確的正則表達式嗎? 它應該是 2 個字母或數字后跟數字。

These would be valid: 
AA00
AB12
A123
1234

These would not
1DAA
D1D2
DDDD

這是我的代碼示例

public void installFilterOnlyNumberAndLetters(final TextField tf) {
tf.textProperty().addListener(new ChangeListener<String>() {
  @Override
  public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
    if (newValue != null && !newValue.matches("(([A-Z][A-Z0-9])||([A-Z][A-Z])|(|\\d\\d))\\d+")) {
      tf.setText(newValue.replaceAll("[^(([a-z][a-z0-9])||([a-z][a-z])|(|\\d\\d))\\d+]", ""));
    }
  }
});

}

你的心態在這里有問題。

您要求:如果輸入無效,請清除輸入。

這是有問題的; 如果沒有“通過”無效輸入,就不可能得到有效輸入。

假設我要輸入有效的 AA00。

我單擊您的文本框,輸入“A”,然后我的 A 立即消失。 畢竟,“A”是無效的。

即使您嘗試通過允許單個字符來解決此問題,或者通過“單個字母或數字也有效”來調整“有效內容”的規則,您現在創建的內容也令人難以置信。 如果我從其他地方粘貼一個 ID,而我的 ID 以空格開頭,那么我認為我的電腦壞了:我粘貼“AA00”,我的文字就消失了。

這不是您構建良好用戶界面的方式。

這是一種替代方法,同樣簡單:

您添加一個更改的偵聽器。 您檢查輸入。 如果輸入有效,則將輸入元素的背景着色為淺綠色。 如果輸入為空,則將其着色為默認背景顏色。 否則,給它一個紅色調。

現在,當我鍵入 ID 時,我會得到視覺反饋。

經驗法則相當簡單:除非你真的、真的知道你在做什么,否則不要亂用用戶的輸入

您創建了一個非常復雜的正則表達式。 這個簡單的將完全涵蓋您要求的內容:2 個字符,可以是字母或數字,后跟任意數量的數字:

Pattern.compile("^[a-zA-Z0-9]{2}[0-9]*$")

是你所需要的全部。 它甚至讀起來就像你問的那樣:“2 個字母/數字”,然后是“任意數量的數字”。

假設以下最小大小為 4 - 可以根據需要更改

public static final String C2_PRE_STR = "([a-zA-Z]{2}|\\d{2})\\d{2,}";

public static void main(String[] args) {
    List<String> valids = List.of("AA00", "AB123", "AA2345", "1234", "12345");
    List<String> invalids = List.of("1DAA", "D1D2", "DDDD", "A1", "11");

    System.out.printf("%10s %10s %10s %10s\n", "input", "expected", "actual", "matching?");
    valids.forEach(s -> System.out.printf("%10s %10s %10s %b\n", s, s, validatedValue(s), s.matches(C2_PRE_STR)));
    invalids.forEach(s -> System.out.printf("%10s %10s %10s %b\n", s, "", validatedValue(s), s.matches(C2_PRE_STR)));
}

private static String validatedValue(String input) {
    return input.matches(C2_PRE_STR) ? input : "";
}

在下面產生

> Task :RegEx.main()
     input   expected     actual  matching?
      AA00       AA00       AA00 true
     AB123      AB123      AB123 true
    AA2345     AA2345     AA2345 true
      1234       1234       1234 true
     12345      12345      12345 true
      1DAA                       false
      D1D2                       false
      DDDD                       false
        A1                       false
        11                       false

暫無
暫無

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

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