Java - неизвестные символы, передаваемые как [a-zA-z0-9] *? - PullRequest
1 голос
/ 13 января 2011

Я не эксперт по регулярным выражениям, но мне нужно проанализировать некоторые входные данные, которые я не могу контролировать, и убедиться, что отфильтровал все строки, которые не имеют A-z и / или 0-9.

Когда я запускаю это,

Pattern p = Pattern.compile("^[a-zA-Z0-9]*$"); //fixed typo
if(!p.matcher(gottenData).matches())
       System.out.println(someData); //someData contains gottenData

определенные пробелы + неизвестный символ как-то проскальзывает через фильтр (gottenData - красный прямоугольник): screenshot

Если вам интересно, он также отображает текст, не все так.

Пока я не возражаю против [?], Если он также содержит некоторую строку вместе с ним.

Пожалуйста, помогите.

[EDIT] Насколько я могу судить по (очень большому) входу, [?] - это либо пробелы, либо вообще ничего; возможно, есть какая-то проблема с кодировкой, а также, возможно, что-то, связанное с узлами #text (input is xml)

Ответы [ 7 ]

6 голосов
/ 13 января 2011

Квантификатор * соответствует «нулю или более», что означает, что он будет соответствовать строке, которая не содержит символов в вашем классе. Попробуйте + квантификатор, что означает «Один или несколько»: ^[a-zA-Z0-9]+$ будет соответствовать строкам, состоящим только из буквенно-цифровых символов. ^.*[a-zA-Z0-9]+.*$ будет соответствовать любой строке, содержащей один или несколько буквенно-цифровых символов, хотя ведущий. * Сделает его намного медленнее. Если вы используете Matcher.lookingAt() вместо Matcher.matches, для него не потребуется полное совпадение строк, и вы можете использовать регулярное выражение [a-zA-Z0-9]+.

4 голосов
/ 13 января 2011

В вашем регулярном выражении есть ошибка: вместо [a-zA-z0-9]* должно быть [a-zA-Z0-9]*.

Вам не нужно ^ и $ вокруг регулярного выражения. Matcher.matches() всегда соответствует полной строке.

String gottenData = "a ";
Pattern p = Pattern.compile("[a-zA-z0-9]*");
if (!p.matcher(gottenData).matches())
    System.out.println("doesn't match.");

это печатает "doesn't match."

2 голосов
/ 13 января 2011

Правильный ответ - это комбинация вышеуказанных ответов.Во-первых, я предполагаю, что ваш предполагаемый матч по характеру [a-zA-Z0-9].Обратите внимание, что Az не так плох, как вы думаете, он включает в себя все символы в диапазоне ASCII между A и z, которые представляют собой буквы плюс несколько дополнительных (в частности [, \,], ^, _, `).

Вторая потенциальная проблема, о которой упоминал Мартин, заключается в том, что вам может понадобиться указать начальный и конечный квалификаторы, если вы хотите, чтобы строка состояла только из букв и цифр.означает 0 или больше, поэтому вы можете сопоставить 0 символов, и совпадения вернут true, поэтому ваш шаблон будет соответствовать любому входу.Что вам нужно, это + квантификатор.Поэтому я отправлю шаблон, который вы, скорее всего, ищете:

^ [a-zA-Z0-9] + $

2 голосов
/ 13 января 2011

Вы должны изменить регулярное выражение на "^[a-zA-Z0-9]*$", чтобы убедиться, что вы соответствуете всей строке

1 голос
/ 13 января 2011

Кто-нибудь рассматривал возможность добавления пространства к регулярному выражению [a-zA-Z0-9 ]*.это должно соответствовать любому нормальному тексту с символами, числом и пробелами.Если вам нужны кавычки и другие специальные символы, добавьте их также в регулярное выражение.

Вы можете быстро проверить свое регулярное выражение в http://www.regexplanet.com/simple/

1 голос
/ 13 января 2011

Похоже, это должно быть "a-zA-Z0-9", а не "a-zA-z0-9", попробуйте исправить это ...

0 голосов
/ 19 июня 2019

Вы можете проверить, что входное значение содержит строку и цифры? с помощью регулярных выражений ^ [a-zA-Z0-9] * $

если ваше значение только что содержало numberString, чем его показ match т.е., riz99, riz99z иначе он покажет не совпадает т.е. 99z., riz99.z, riz99.9

Пример кода:

if(e.target.value.match('^[a-zA-Z0-9]*$')){
            console.log('match')
          }
          else{
            console.log('not match')
          }
}

рабочий пример онлайн

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