如何检查字符串是否仅由字母和数字组成

时间:2015-11-01 21:38:40

标签: java

让我们说用户输入文字。如何检查相应的String是否仅由字母和数字组成?

import java.util.Scanner;
public class StringValidation {
    public static void main(String[] args) {
       Scanner in = new Scanner(System.in);
       System.out.println("Enter your password");
       String name = in.nextLine();
       (inert here)

4 个答案:

答案 0 :(得分:9)

您可以在字符串对象上调用matches函数。像

这样的东西
str.matches("[a-zA-Z0-9]*")

如果字符串只包含字母或数字,则此方法将返回true。

String.matches教程:http://www.tutorialspoint.com/java/java_string_matches.htm

正则表达式测试和解释:https://regex101.com/r/kM7sB7/1

答案 1 :(得分:4)

  1. 使用正则表达式:

    Pattern pattern = Pattern.compile("\\p{Alnum}+");
    Matcher matcher = pattern.matcher(name);
    if (!matcher.matches()) {
        // found invalid char
    }
    
  2. for循环,没有正则表达式:

    for (char c : name.toCharArray()) {
        if (!Character.isLetterOrDigit(c)) {
            // found invalid char
            break;
        }
    }
    
  3. 两种方法都匹配大写和小写字母和数字,但不匹配负数或浮点数

答案 2 :(得分:0)

将正则表达式从[a-zA-Z0-9]修改为^[a-zA-Z0-9]+$

String text="abcABC983";
System.out.println(text.matches("^[a-zA-Z0-9]+$"));

当前输出:true

答案 3 :(得分:0)

正则表达式字符类\p{Alnum}可以与String#matches结合使用。它相当于 [\p{Alpha}\p{Digit}][a-zA-Z0-9]

boolean allLettersAndNumbers = str.matches("\\p{Alnum}*");
// Change * to + to not accept empty String

参见Pattern documentation