如何限制用户输入数字,字母,空格和破折号?

时间:2018-04-09 09:14:53

标签: java regex java.util.scanner

我将用户输入限制为20个字符但不知道如何将其限制为仅字母,数字,空格和短划线。 我使用了像

这样的东西
 System.out.println("\nEnter title: ");
    title = scanner.nextLine();
    while(title.length()>=20){
        System.out.println("\nEnter title with max 20 chars and only letters and numbers: ");
        title = scanner.nextLine();
    }

3 个答案:

答案 0 :(得分:0)

匹配预期的正则表达式

v2 = c(-1, -1, 1, 1, 1, -1, 1, -1)

所以java代码可能是

^[A-Za-z0-9 -]{1,20}$

请注意,短划线必须是字符集中的最后一个或第一个(以字面为单位)字符,否则用于设置间隔。

答案 1 :(得分:0)

这就像你现在拥有它一样,只有更多的支票。我会把它放到一个单独的函数中。

public void test(String[] args) throws Exception {
    String title;
    Scanner scanner = new Scanner(System.in);
    System.out.println("\nEnter title: ");
    title = scanner.nextLine();
    while (!validTitle(title)) {
        System.out.println("\nEnter title with max 20 chars and only letters and numbers: ");
        title = scanner.nextLine();
    }
}

private static final String DIGITS = "0123456789";
private static final String LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String VALID_TITLE_CHARS = DIGITS + LETTERS + " _-";
private boolean validTitle(String title) {
    if (title.length() >= 20) return false;
    for(int i = 0; i < title.length(); i++) {
        if(VALID_TITLE_CHARS.indexOf(title.charAt(i)) < 0) {
            return false;
        }
    }
    return true;
}

答案 2 :(得分:0)

Pattern p = Pattern.compile("^[- a-zA-Z0-9]{1,20}$");
...
Matcher m = p.matcher(title);
if (!m.matches()) {
    System.out.println("\nEnter title with max 20 chars and only letters and numbers: ");
    title = scanner.nextLine();
}

^ [ - a-zA-Z0-9] {1,20} $:只有短划线,空格,字母,长度为1-20的数字

如果您经常使用它,请尝试仅编译一次该模式。这使它更快。