Валидация строки функцией Clarion MATCH

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Валидация строки функцией Clarion MATCH

Сообщение Developer »

Привет всем!

Необходимо выполнить валидацию строки по определённым правилам:

Есть регулярные выражения для валидации распространенных видов данных
https://habrahabr.ru/post/123845/

1)Номер кредитки:
[0-9]{13,16}

2)ICQ:
([1-9])+(?:-?\d){4,}

3)Набор из букв и цифр (латиница):
^[a-zA-Z0-9]+$

4)Набор из букв и цифр (латиница + кириллица):
^[а-яА-ЯёЁa-zA-Z0-9]+$

5)Домен (например abcd.com):
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$

6)IPv4: (подкорректировано runcore)
((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)

7)IPv6:
((^|:)([0-9a-fA-F]{0,4})){1,8}$

8 )Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):
^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$

9)Пароль (Строчные и прописные латинские буквы, цифры):
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$

10)Пароль (Строчные и прописные латинские буквы, цифры, спецсимволы. Минимум 8 символов):
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$

11)Дата в формате YYYY-MM-DD:
[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])

UPD. Более строгая проверка:
(19|20)\d\d-((0[1-9]|1[012])-(0[1-9]|[12]\d)|(0[13-9]|1[012])-30|(0[13578]|1[02])-31)

12)Дата в формате DD/MM/YYYY:
(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d

13)Целые числа и числа с плавающей точкой (разделитель точка):
\-?\d+(\.\d{0,})?

UUID:
^[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}$

14)Широта или долгота:
-?\d{1,3}\.\d+

15)E-mail:
^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$

UPD. URL на латинице. Если нужно распознавать и кириллические домены, необходимо изменить все «a-z0-9» на «а-яёa-z0-9» и добавить в список доменных зон «РФ»

~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:ru|su|com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&?+=\~/-]*)?(?:#[^ '\"&]*)?$~i

16)Время в формате HH:MM:SS :
^([0-1]\d|2[0-3])(:[0-5]\d){2}$

17) Mac-адрес :
([0-9a-fA-F]{2}([:-]|$)){6}$|([0-9a-fA-F]{4}([.]|$)){3}


Clarion code:

RV = MATCH((CLIP(PasswordValidateString)),'(?=^.<123>8,<125>$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$', Match:Regular)


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

Проверка на требуемое соответствие сложности пароля:

PasswordValidateString = 'Sj3w&k5Y7^9s%hs0'

RV = MATCH((CLIP(PasswordValidateString)),'(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$', Match:Regular)

Ошибка компилятора :(

Проблемные символы { } - исправляю { на <123> , } на <125> ошибка устранена - но валидация не работает RV == 0 :(


На http://html5pattern.com/Passwords PasswordValidateString = 'Sj3w&k5Y7^9s%hs0' - успешно проходит валидацию :D

Как вставить в выражение Clarin MATCH "проблемные" символы и правильно оформить строку выражения для проверки требуемой сложности пароля в Clarion?
Последний раз редактировалось Developer 25 Март 2017, 0:48, всего редактировалось 1 раз.
С Уважением, Developer
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3288
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Валидация строки функцией Clarion MATCH

Сообщение Дед Пахом »

А хелп по MATCH почитать не наш метод?
С уважением, ДП
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Валидация строки функцией Clarion MATCH

Сообщение Developer »

Читал
{...} Brackets are used for grouping in regular expressions as in arithmetic. They can be used to concatenate regular expressions containing the alternation operator, |.

- результата нет :(

Как правильно?
С Уважением, Developer
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Валидация строки функцией Clarion MATCH

Сообщение Developer »

Исправил
MATCH(UPPER(CLIP(PasswordValidateString)),'(?=^.{{8|,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$', Match:Regular)

Ошибки компилятора нет - но валидация не работает :(
С Уважением, Developer
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3288
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Валидация строки функцией Clarion MATCH

Сообщение Дед Пахом »

Ну и где в хелпе про ?=, \W, \n и тому подобное? Там совсем другие регулярные выражения.
С уважением, ДП
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Валидация строки функцией Clarion MATCH

Сообщение Developer »

Дед Пахом писал(а): Ну и где в хелпе про ?=, \W, \n и тому подобное? Там совсем другие регулярные выражения.
Намек на то, что необходимо создать соответствующее требованиям Clarion MATCH выражение :D
С Уважением, Developer
Ал
✯ Ветеран ✯
Сообщения: 1038
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Валидация строки функцией Clarion MATCH

Сообщение Ал »

Developer писал(а):Читал
{...}
... а про Match:NoCase?
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Валидация строки функцией Clarion MATCH

Сообщение Yufil »

А не надо удваивать левую фигурную скобку?

'1{8}' = '11111111'
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Валидация строки функцией Clarion MATCH

Сообщение Developer »

Ал писал(а): ... а про Match:NoCase?
Перепробовал. Результата нет.

Причина в том, что взяты примеры с https://habrahabr.ru/post/123845/
которые в деталях (как правильно указал Дед Пахом) не соответствуют требованиям функции Clarion MATCH. Необходимо привести в соответствие этим требованиям.

Опыта нет, поэтому может у кого есть готовые (любые) работающие регулярные
выражения для Clarion MATCH, прошу опубликовать в этой теме.

Обнаружил хорошую книгу по регулярным выражениям, но там все примеры не для функции Clarion MATCH :(

Думаю будет в помощь :D

Залил на FTP _Books\Regular Expression\fridl_regulyarnye_vyrajeniya_3_izdanie_djvu.rar
Последний раз редактировалось Developer 26 Март 2017, 0:20, всего редактировалось 1 раз.
С Уважением, Developer
Ал
✯ Ветеран ✯
Сообщения: 1038
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Валидация строки функцией Clarion MATCH

Сообщение Ал »

Developer писал(а):(любые) работающие регулярные выражения для Clarion MATCH

Код: Выделить всё

...
if ~MATCH(UPPER(CLIP(sub(str,count_n,1))),'^[-A-Z0-9А-Я._]', Match:Regular)       
        BREAK ! 
.    
...
 if MATCH(UPPER(CLIP(loc:Email)),'^[-A-ZА-Я0-9._]+@{{[-A-ZА-Я0-9._]+.}+[A-ZА-Я][A-ZА-Я][A-ZА-Я]?[A-ZА-Я]?$', Match:Regular)
      if glo:FlagDelDuble = 1 !  проверить на повторение
...
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Валидация строки функцией Clarion MATCH

Сообщение Developer »

Ал спасибо за пример!

Одна небольшая просьба - к примеру регулярного выражения оставлять краткое описание.
Ал писал(а):  if MATCH(UPPER(CLIP(loc:Email)),'^[-A-ZА-Я0-9._]+@{{[-A-ZА-Я0-9._]+.}+[A-ZА-Я][A-ZА-Я][A-ZА-Я]?[A-ZА-Я]?$', Match:Regular)
      if glo:FlagDelDuble = 1 !  проверить на повторение
- loc:Email - валидация адреса электронной почты :wink:

А вот первый пример о чём - счётчик чего-то :?

А в общем, спасибо! :D
С Уважением, Developer
Ал
✯ Ветеран ✯
Сообщения: 1038
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Валидация строки функцией Clarion MATCH

Сообщение Ал »

да на здоровье, :wink:
Developer писал(а): А вот первый пример о чём - счётчик чего-то :?
из старого архива "куснул", там адреса выбирал из разных текстов, в 1м примере - проверка условия на выход из цикла при определении позиции начала обработки фрагмента текста, а во 2м - действительно проверка адреса
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Валидация строки функцией Clarion MATCH

Сообщение Yufil »

1. Ещё разок - в Clarion в строках надо удваивать символы '<' и '{' , иногда может работать правильно, но не факт.
Например, Message('<b>Привет!</b>') у меня выдавало пустую строку.
2. ftp-каталоги с именами кириллицей у меня в Total Commander отображаются кракозябрами и не открываются, так что с высокой вероятностью их не прочтут и другие. Создал каталог с названием 'Regular Expression', куда залил ещё несколько книжек ....
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Валидация строки функцией Clarion MATCH

Сообщение Developer »

Yufil писал(а): 1. Ещё разок - в Clarion в строках надо удваивать символы '<' и '{' , иногда может работать правильно, но не факт.
Например, Message('<b>Привет!</b>') у меня выдавало пустую строку.
2. ftp-каталоги с именами кириллицей у меня в Total Commander отображаются кракозябрами и не открываются, так что с высокой вероятностью их не прочтут и другие. Создал каталог с названием 'Regular Expression', куда залил ещё несколько книжек ....
1)Спасибо за ответ!
2)Поддерживаю!
3)Спасибо за книги!
С Уважением, Developer
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Валидация строки функцией Clarion MATCH

Сообщение Developer »

Как правильно оформить в Clarion MATCH

\w [[:word:]] Буквенный или цифровой символ или знак подчёркивания
\W [^[:word:]] Любой символ, кроме буквенного или цифрового символа или знака подчёркивания
С Уважением, Developer
Ответить