2014-01-17 16 views
2

Мне нужно написать регулярное выражение, которое допускает только цифры, символы, такие как & | ,() и пробелов.Java Regular Expression - разрешить только определенные символы и цифры

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 

     List<String> input = new ArrayList<String>(); 
     input.add("(0.4545 && 0.567) || 456"); // should PASS 
     input.add("9876-5-4321"); 
     input.add("987-65-4321 (attack)"); 
     input.add("(0.4545 && 0.567) || 456 && (me)"); 
     input.add("0.456 && 0.567"); // should PASS 
     for (String ssn : input) { 
      boolean f = ssn.matches("^[\\d\\s()&|.]$"); 
      if (f) { 
       System.out.println("Found good SSN: " + ssn); 
      }else { 
       System.out.println("Nope: " + ssn); 
      } 
     } 
    } 
} 

Ничего выше не было, почему?

+0

Поиск по одной из онлайн шашек регулярных выражений и подтвердить регулярное выражение делает то, что вы думаете, что делает ... – John3136

ответ

5

Вы забыли добавить + после символьного класса. Без него ваше регулярное выражение будет принимать только односимвольные строки с символами из вашего класса символов. Попробуйте с

boolean f = ssn.matches("^[\\d\\s()&|.]+$"); 
+0

woow, спасибо. Я забыл добавить +, отлично работает. – antohoho

+0

@antohoho Добро пожаловать :) – Pshemo

2

Поскольку регулярное выражение принимает один вход только (либо цифры или буквы или символы, заданные)

Используйте ^[\\d\\s()&|.]*$ для получения несколько раз

«+ 1 или более»

? 0 или один

«* 0 или более»

Смежные вопросы