Как мне отфильтровать все, кроме слов, цифр и нескольких символов в Java? - PullRequest
1 голос
/ 20 марта 2012

Итак, у нас есть столбец базы данных, который может содержать что угодно.Unicode, цифры, слова и т. Д.

Однако нам необходимо отправить эти данные во внешнюю службу, и они очень строги в отношении того, что они примут.В основном только на английском языке, слова, цифры и т. Д.

Мы не можем изменить требования к этой услуге, поэтому нам нужно отфильтровать то, что отправляют нам пользователи, прежде чем мы отправим им.

MyНавыки RegEx слабы.Вот что нам нужно:

Символы [a-zA-Z] Числа [0-9] Следующие символы:! @ # $% ^ & * () -_ = +;: ',. /? \

И это все.Конечно, это может быть в любой комбинации.Мы просто хотим удостовериться, что ничего не пропущено в этом списке.

Любая помощь по созданию этого фильтра в Java будет принята с благодарностью.

Кстати, я предполагаю, чтотот же шаблон RegEx будет работать для JavaScript?

РЕДАКТИРОВАТЬ

Вот мой пример (используя Edmastermind29):

public static void main(String[] args) {

    String pattern = "^[A-Za-z0-9!@#$%^&*()-_=+;:',./?\\]";
    String text = "Hello, I need everything in this string except the { or }";

    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(text);

    // here, I need everything but the {}.
    // so I should have:  Hello, I need everything in this string except the  or 

}

ОК, явыяснил, как избежать этой строки.Но как мне получить все, что не отфильтровано?

Ответы [ 3 ]

3 голосов
/ 20 марта 2012

Вам необходимо выполнить итерацию каждой соответствующей подпоследовательности и объединить строки.В приведенном примере решение будет выглядеть так:

public static void main( String[] args ) {
  String pattern = "[A-Za-z0-9!@#$%^&*()-_=+;:',./?\\ ]*";
  String text = "Hello, I need everything in this string except the { or }";

  Pattern p = Pattern.compile( pattern );
  Matcher m = p.matcher( text );
  StringBuilder sb = new StringBuilder();
  while( m.find() )
  {
     sb.append( m.group() );
  }
  String result = sb.toString();
  System.out.println( "Result: '" + result + "'" );
}
2 голосов
/ 20 марта 2012

[A-Za-z0-9!@#$%^&*()\-_=+;:',./?\\]*

Принимает любое количество прописных и строчных букв, любое количество цифр и любое количество следующих символов !@#$%^&*()-_=+;:',./?\, как указано в вашем сообщении.

1 голос
/ 20 марта 2012

В Javascript вы можете просто создать функцию onSubmit, которая соответствует регулярному выражению /^[A-Za-z0-9!@#$%^&*()-_=+;:',./?\\]$/ для ввода, и не разрешать отправку формы, если она возвращает false.

Обратите внимание, что вы должны экранировать"\" персонаж

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...