仅允许使用java的字母数字值

时间:2014-09-24 06:37:43

标签: java regex

我需要获得只有字母数字的值,它可以是任何属于这个的

1. asd7989 - true
2. 7978dfd - true
3. auo789dd - true
4. 9799 - false
5.any special characters - false

我尝试了以下但是没有给出预期的结果

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.struts.action.ActionMessage;

public class Test {

  public static void main(String[] args) {

      Pattern pattern = Pattern.compile("^[0-9a-zA-Z]+$");
      Matcher matcher = pattern.matcher("465123");
      if(matcher.matches()) {
           System.out.println("match");
      }else{
          System.out.println("not match");
      }
  }
}

结果应该是not match,但我得到match

3 个答案:

答案 0 :(得分:1)

你需要为这个正则表达式使用前瞻:

^(?=.*?[a-zA-Z])(?=.*?[0-9])[0-9a-zA-Z]+$

RegEx Demo

Lookaheads将确保输入字符串中至少包含一个字母和至少一个数字。

答案 1 :(得分:1)

在将正则表达式传递给matches方法时,您不需要包含开始和结束锚点。

[0-9a-zA-Z]*[a-zA-Z][0-9a-zA-Z]*[0-9][0-9a-zA-Z]*|[0-9a-zA-Z]*[0-9][0-9a-zA-Z]*[A-Za-z][0-9a-zA-Z]*

答案 2 :(得分:1)

您可以使用此模式(使用不区分大小写的选项):

\A(?>[0-9]+|[A-Z]+)[A-Z0-9]+\z

我们的想法是使用贪婪和原子组来确保组中匹配的字符与组外匹配的第一个字符不同。

注意:使用matches()方法,您可以删除锚点,因为它们是隐式的。