AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.05.2014, 16:01   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Ax12. Проверка строки на русские буквы.
Коллеги, всех с праздниками! Подскажите, есть какая то стандартная функция для проверки строки на содержание букав только русского языка (можно любого)?

Заранее спасибо!
Старый 11.05.2014, 19:11   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
и вас тоже с праздниками.

Я в таких случаях использую strkeep передавая ей в качестве параметра все символы русского алфавита. Если вернулась непустая строка то значит есть.
Старый 11.05.2014, 19:27   #3  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Про стандартную не слышал.
А я использую обычно char2num и проверяю на диапазон от А до я
Старый 11.05.2014, 19:56   #4  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
В 12 есть замечательная функция match(str pattern, str text)
Указываете диапазон русских букв , указываете строку, в которой надо произвести проверку и вам вернёт , есть ли русские буквы аль нет

http://msdn.microsoft.com/en-us/library/aa886279.aspx
Старый 12.05.2014, 11:30   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от user_ax Посмотреть сообщение
Указываете диапазон русских букв
http://msdn.microsoft.com/en-us/library/aa886279.aspx
А можно пример
Старый 12.05.2014, 11:50   #6  
axotnik88 is offline
axotnik88
Участник
 
82 / 18 (1) ++
Регистрация: 05.06.2012
Если что пиши.
X++:
str     allowStr    = "^[а-яэъыёА-ЯЭЪЫЁ]+$";
    ;

    if (!match(allowStr, _value))
        ret = checkFailed(strfmt("Поле '%1' содержит запрещающие знаки.",
            _errorMsg));
За это сообщение автора поблагодарили: Ruff (2), Мартынов Дмитрий (1), Sada (1), raniel (1).
Старый 12.05.2014, 11:54   #7  
Krash is offline
Krash
Участник
Аватар для Krash
 
17 / 15 (1) ++
Регистрация: 23.08.2005
Цитата:
Сообщение от Sada Посмотреть сообщение
А можно пример
PHP код:
info(int2str(match("[а-я]","test"))); // 0 - "e" английская
info(int2str(match("[а-я]","tеst"))); // 1 - "e" русская 
Старый 12.05.2014, 16:22   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Может меня не правильно поняли, но мне нужна проверка строки, на то, что она состоит только из русских букв. То есть, если там есть хоть одна английская, то ругаться
Старый 12.05.2014, 16:24   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от axotnik88 Посмотреть сообщение
Если что пиши.
X++:
str     allowStr    = "^[а-яэъыёА-ЯЭЪЫЁ]+$";
    ;

    if (!match(allowStr, _value))
        ret = checkFailed(strfmt("Поле '%1' содержит запрещающие знаки.",
            _errorMsg));
X++:
    str     allowStr    = "^[а-яэъыёА-ЯЭЪЫЁ]+$";
    ;
    if (!match(allowStr, "мама"))
        checkFailed(strfmt("Поле '%1' содержит запрещающие знаки.",
            "жажажа"));
X++:
    str     allowStr    = "^[а-яэъыёА-ЯЭЪЫЁ]+$";
    ;
    if (!match(allowStr, "mother"))
        checkFailed(strfmt("Поле '%1' содержит запрещающие знаки.",
            "жажажа"));
Ругается одинаково.
ЗЫ: вы как к этому "^[а-яэъыёА-ЯЭЪЫЁ]+$" пришли
Старый 12.05.2014, 16:25   #10  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
X++:
if (strlen(strkeep(_str, 'АБ....я')) != strlen(_str))
За это сообщение автора поблагодарили: Sada (3).
Старый 12.05.2014, 16:25   #11  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от Krash Посмотреть сообщение
PHP код:
info(int2str(match("[а-я]","test"))); // 0 - "e" английская
info(int2str(match("[а-я]","tеst"))); // 1 - "e" русская 
info(int2str(match("[а-я]","тввмывдмьлляz"))); 1
info(int2str(match("[а-я]","тввмывдмьлля"))); 1

в первой строке английская Z
Старый 12.05.2014, 16:26   #12  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Sada Посмотреть сообщение
Может меня не правильно поняли, но мне нужна проверка строки, на то, что она состоит только из русских букв. То есть, если там есть хоть одна английская, то ругаться
Так в предыдущем посте и есть эта проверка.
функция match выдадет вам 1 , если в проверяемой строке есть хотя бы один элемент из шаблона.
То есть, вам нужно:

X++:
str _val;
int res;

_val = 'Тут какой-то русский текст with some english words';
res = match("[а-я]",_val);
if (res == 0)
ret = checkFailed("Only english Letters");
Надеюсь, я правильно Вас понял.
За это сообщение автора поблагодарили: Sada (3).
Старый 12.05.2014, 16:28   #13  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Sada Посмотреть сообщение
info(int2str(match("[а-я]","тввмывдмьлляz"))); 1
info(int2str(match("[а-я]","тввмывдмьлля"))); 1

в первой строке английская Z
В кач-ве шаблона можно передать регулярное выражения. Если я правильно понял, кроме диапазона ещё что-то нужно указать, но вот что - не могу подсказать, сам не сталкивался
Старый 12.05.2014, 16:33   #14  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Строка "АБВ" должна пройти проверку, а вот "АБВZ" пройти не должно, так как Z - это не русская буква
Старый 12.05.2014, 16:35   #15  
Krash is offline
Krash
Участник
Аватар для Krash
 
17 / 15 (1) ++
Регистрация: 23.08.2005
Цитата:
Сообщение от Sada Посмотреть сообщение
info(int2str(match("[а-я]","тввмывдмьлляz"))); 1
info(int2str(match("[а-я]","тввмывдмьлля"))); 1

в первой строке английская Z
В принципе, шаблон (первый параметр) можно поменять на английский.
Только и условие тогда будет, поиск английских букв в строке. Если нашли хоть одну - match вернёт 1.
Конечно, если нужно проверить наличие всех без исключения символов, кроме русского алфавита (не только английские буквы) - лучше использовать другой путь.
PHP код:
    info(int2str(match("[a-z]","тввмывдмьлляz"))); // 1
    
info(int2str(match("[a-z]","тввмывдмьлля")));  // 0 

Последний раз редактировалось Krash; 12.05.2014 в 16:48.
Старый 12.05.2014, 16:37   #16  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от raz Посмотреть сообщение
X++:
if (strlen(strkeep(_str, 'АБ....я')) != strlen(_str))
Ну в принципе да

X++:
    if (strlen(strkeep("ювабижывбаиz", 'йцукенгшщзхъфывапролджэячсмитьбю')) != strlen("ювабижывбаиz"))
        warning("Ой Ой");
вот такая штука работает вроде, но не красивоооо
Старый 12.05.2014, 17:31   #17  
axotnik88 is offline
axotnik88
Участник
 
82 / 18 (1) ++
Регистрация: 05.06.2012
я предоставил рабочий код. в нашей системе он реализован для проверки кода клиента на соответсвие только русским символам. Все просто регулярные выражение. http://subcoder.ru/%D1%80%D0%B5%D0%B...%D0%B0-%D1%8F/
Правда у меня исходня строка разрешает еще цифры.
X++:
allowStr    = "^[а-яэъыёА-ЯЭЪЫЁ0-9]+$";
Действительно когда убираешь 0-9 в регулярке, перестает работать
В Вашем случае прекрастно работает с
X++:
allowStr    = '^[а-яА-ЯёЁ]+$';

Последний раз редактировалось axotnik88; 12.05.2014 в 17:46. Причина: дополнение
Старый 12.05.2014, 17:42   #18  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от axotnik88 Посмотреть сообщение
я предоставил рабочий код. в нашей системе он реализован для проверки кода клиента на соответсвие только русским символам. Все просто регулярные выражение. http://subcoder.ru/%D1%80%D0%B5%D0%B...%D0%B0-%D1%8F/
Правда у меня исходня строка разрешает еще цифры.
X++:
allowStr    = "^[а-яэъыёА-ЯЭЪЫЁ0-9]+$";
Действительно когда убираешь 0-9 в регулярке, перестает работать
Это все равно пять Спасибо!
Старый 12.05.2014, 18:09   #19  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Sada Посмотреть сообщение
Ну в принципе да

X++:
    if (strlen(strkeep("ювабижывбаиz", 'йцукенгшщзхъфывапролджэячсмитьбю')) != strlen("ювабижывбаиz"))
        warning("Ой Ой");
вот такая штука работает вроде, но не красивоооо
В макрос все эти буквы, в макрос
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сортировка после изменения номера строки alicedr DAX: Программирование 4 11.11.2012 00:29
Проверка цикличности в спецификации vey DAX: Функционал 2 24.03.2005 11:03
Русские буквы не отображаются AlexCh DAX: Администрирование 3 20.01.2005 16:21
При создании строки в закупке статус строки становится "Отменено" AlexUnik DAX: Функционал 4 27.09.2004 16:05
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:16.