2017-03-06 198 views
0

我要驗證Java中的字符串,其中包含以下順序:特定字符串格式

SAVA950720HMCLZL04

也就是說,四個字母,六個數字,六個字母和最後兩個數字。

我正在閱讀有關正則表達式的內容,但我無法理解如何實現它。

我做了這種方法來驗證前四個字母。

public void name(String s){ 
Pattern pat=Pattern.compile("[a-zA-z]{4}"); 
Matcher mat=pat.matcher(curp); 
if(mat.matches()){ 
    JOptionPane.showMessageDialog(null, "Validating"); 
}else{ 
    JOptionPane.showMessageDialog(null, "Check your data. please", "error",JOptionPane.ERROR); 
} 
} 

我想我可能是錯的,因爲我不知道如何正確地執行它,什麼可能是正確的解決我的問題任何幫助?

+1

注意['[AZ]'匹配不僅僅是字母(http://stackoverflow.com/a/29771926/3832970 )。 'matches()'方法錨定正則表達式,所以你只能匹配4個字符的字符串。所以,你需要'匹配(「[A-ZA-Z] {4} [0-9] {6} [A-ZA-Z] {6} [0-9] {2}」)' –

+0

'Az '應該是'AZ'。爲了表示數字,可以使用'[0-9]'或'\ d'(在字符串文字中,你需要另外轉義'''',所以它看起來像'「\\ d」')。 'matches()'檢查正則表達式是否可以匹配整個字符串,而不僅僅是它的一部分。 – Pshemo

回答

0
  1. Matcher.match嘗試將整個字符串與模式匹配,並且您當前的模式僅驗證4個字符。這裏是你可以做,以測試你的正則表達式是什麼:

    • 您可以在正則表達式年底建成.*相匹配的字符串的其餘
    • 您也可以使用Matcher.findMatcher.lookingAt來匹配字符串
  2. 你的圖案具有一個錯字,第二間隔過寬A-z VS A-Z

0

試試這個正則表達式:

[a-zA-Z]{4}\d{6}[a-zA-Z]{6}\d{2} 

以上將驗證爲四個字母,六個數字,六個字母和最後兩個數字。

你的情況
2

正則表達式是:

[a-zA-Z]{4}[0-9]{6}[a-zA-Z]{6}[0-9]{2} 

找到匹配很簡單:

public void name(String s){ 
    String pattern = "[a-zA-Z]{4}[0-9]{6}[a-zA-Z]{6}[0-9]{2}"; 
    boolean match = s.matches(pattern); 
    if (match) { 
     ... 
    } else { 
     ... 
    } 
} 

你可以從這裏https://regex101.com/

測試正則表達式編輯

我使用[0-9] inste \ d的廣告,以確保只有數字的安全匹配。更多詳細信息可以在這裏找到:Should I use \d or [0-9] to match digits in a Perl regex?

0
package com.stackoverflow._42635543; 

import java.util.regex.Pattern; 

public class Main { 

    public static void main(String[] args) { 
    Pattern pat = Pattern.compile("[A-Za-z]{4}[0-9]{6}[A-Za-z]{6}[0-9]{2}"); 

    if (pat.matcher("SAVA950720HMCLZL04").matches()) { 
     System.out.println("match"); 
    } else { 
     System.out.println("no match"); 
    } 

    if (pat.matcher("SAVA950720HMCLZL045").matches()) { 
     System.out.println("match"); 
    } else { 
     System.out.println("no match"); 
    } 
    } 
} 

產生

match 
no match