Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Расчет заработной платы и валидация.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
764.46 Кб
Скачать

Валидация данных.

Регулярные выражения (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters).

Регулярные выражения используются в большом количестве языков программирования.

В Java тоже есть пакет, который позволяет работать с ними - java.util.regex.

Метасимволы 

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

Вот примеры основных метасимволов:

  ^     - (крышка, цирркумфлекс) начало проверяемой строки

  $     - (доллар) конец проверяемой строки

  .     - (точка) представляет собой сокращенную форму записи для символьного класса, совпадающего с любым символом

  |     -  означает «или». Подвыражения, объединенные этим способом, называются альтернативами (alternatives)

  ?     - (знак вопроса) означает, что предшествующий ему символ является необязательным

  +     -  обозначает «один или несколько экземпляров непосредственно предшествующего элемента

  *     –  любое количество экземпляров элемента (в том числе и нулевое)

  \\d   –  цифровой символ

  \\D   –  не цифровой символ

  \\s   –  пробельный символ

  \\S   –  не пробельный символ

  \\w   –  буквенный или цифровой символ или знак подчёркивания

  \\W   –  любой символ, кроме буквенного или цифрового символа или знака подчёркивания

Давайте рассмотрим несколько примеров с некоторыми из этих метасимволов. Следующий метод проверит строку на содержание в ней слова BACON и только! Никаких пробелов и других символов. Про классы Pattern и Matcher мы ещё поговорим. Метод matches() проверяет строку на соответствие регулярному выражению.

Квантификаторы

Регулярные выражения предоставляют инструменты позволяющие указать сколько раз может повторятся один или несколько символов. С некоторыми мы уже встречались:

+     - Одно или более

*     - Ноль или более

?     - Ноль или одно

{n}   - Ровно n раз

{m,n} - От m до n включительно

{m,}  - Не менее m

{,n}  - Не более n

Теперь мы можем полностью понять регулярное выражение с самого первого примера: "^[a-z0-9_-]{3,15}$" .

Разберем её по кусочкам:

^ - начало строки

[a-z0-9_-] - символ который может быть маленькой латинской буквой или цифрой или символом подчеркивания.

{3,15} - предыдущий объект(смотри выше) может повторяться от 3х до 15раз.

Классы регулярных выражений в Java

Пакет, который позволяет работать с регулярными выражениями - java.util.regex.

В библиотеке регулярных выражений имеется три основных класса: Pattern, Matcher и PatternSyntaxException.  (еще есть классы ASCII, MatchResult, UnicodeProp)

1. Class Pattern - Регулярное выражение, которое Вы записываете в строке, должно сначала быть скомпилированным в объект данного класса. После компиляции объект этого класса может быть использован для создания объекта Matcher. 

В классе Pattern объявлены следующие методы:

Pattern compile(String regex) – возвращает Pattern, который соответствует regex.

Matcher matcher(CharSequence input) – возвращает Matcher, 

с помощью которого можно находить соответствия в строке input.

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

2. Class Matcher

Объект Matcher анализирует строку, начиная с 0, и ищет соответствие шаблону.

После завершения этого процесса Matcher содержит много информации о найденных (или не найденных) соответствиях в нашей входной строке. Мы можем получить эту информацию, вызывая различные методы нашего объекта Matcher:

 boolean matches() просто указывает, соответствует ли вся входная последовательность шаблону.

 int start() указывает значение индекса в строке, где начинается соответствующая шаблону строка.

 int end() указывает значение индекса в строке, где заканчивается соответствующая шаблону строка плюс единица.

 String group() - возвращает найденную строку

 String group(int group) - если у Вас в регулярном выражении были группы, то можно вывести только кусочек строки соответствующей определенной группе.

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html

Выражение

Описание

\d [0-9]

Одна цифра от 0 до 9.

\D [^0-9]

Любой символ кроме цифры.

\s

Пробел.

[A-Z]

Только заглавная латинская буква.

[A-Za-z]

Только латинская буква в любом регистре.

[А-Яа-яЁё]

Только русская буква в любом регистре.

[A-Za-zА-Яа-яЁё]

Любая буква русского и латинского алфавита.

[0-9]{3}

Три цифры.

[A-Za-z]{6,}

Не менее шести латинских букв.

[0-9]{,3}

Не более трёх цифр.

[0-9]{5,10}

От пяти до десяти цифр.

^[a-zA-Z]+$

Любое слово на латинице.

^[А-Яа-яЁё\s]+$

Любое слово на русском включая пробелы.

^[ 0-9]+$

Любое число.

[0-9]{6}

Почтовый индекс.

\d+(,\d{2})?

Число в формате 1,34 (разделитель запятая).

\d+(\.\d{2})?

Число в формате 2.10 (разделитель точка).

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

IP-адрес

Примечание. Как добавить валидацию на форму?

Вы должны импортировать в свой проект :

import java.util.regex.Matcher;

import java.util.regex.Pattern;

Например, функция для проверки ввода на целое число

public String isInteger(String s) {

String message;

Pattern pattern = Pattern.compile("^\\d+?$");

Matcher m = pattern.matcher(s);

if (m.matches() == false) {

message = "*Неверный ввод. Введите цифры";

} else {

message = "";

}

return message;

}

Задание: Добавьте валидацию при расчете заработной платы на поле Календарное время.

16