2017-03-06 144 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