Что нового

[RegExp] Проблема со проверкой имени файла

my.EXpr

Provehito In Altum
Сообщения
7
Репутация
0
Доброго времени суток.
Элементарная проблема. Есть такой вот код. Не могу понять почему строка подходит под данный шаблон, ведь я ограничиваюсь только латинскими буквами. Символа подчеркивания не указано.

Код:
$sText = 'Agatha_Modern'
$sPattern = '[a-z]'
If StringRegExp($sText, $sPattern, 0) Then MsgBox(0, "result", "OK")


Спасибо.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
my.EXpr,
А так?
Код:
Dim $aText[4] = [3, 'Agatha_Modern', 'AgathaModern', 'agathamodern']

$sPattern = '^[a-z]+$'
$sPattern_1 = '(?i)^[a-z]+$'

ConsoleWrite($sPattern & @LF)
For $i = 1 To $aText[0]
	ConsoleWrite($aText[$i] & @TAB & StringRegExp($aText[$i], $sPattern) & @LF)
Next
ConsoleWrite($sPattern_1 & @LF)
For $i = 1 To $aText[0]
	ConsoleWrite($aText[$i] & @TAB & StringRegExp($aText[$i], $sPattern_1) & @LF)
Next
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
my.EXpr [?]
Не могу понять почему строка подходит под данный шаблон
Твое выражение подтверждает, что в строке имется по- крайней мере одна буква латинского алфавита "[a-z]"
 
Автор
M

my.EXpr

Provehito In Altum
Сообщения
7
Репутация
0
Большое спасибо за быстрые ответы. Необходимо сделать поиск любого возможного имени файла (какое только возможно). Ответы навели меня на банальное решение - простое перечисление необходимых символов. Проблема была в символах начало и конца строки, вернее их отсутствия. Можно еще конечно упростить шаблон, воспользовавшись классами вроде [:alnum:]. Вопрос решен.

Код:
$sText = 'Agatha_Modern'
$sPattern = "^[\Q`[email protected]#$%^&()-_=+[]{};',.\E\sa-zA-Zа-яА-Я\d]+$"
If StringRegExp($sText, $sPattern, 0) Then MsgBox(0, "result", "OK")
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 558
Репутация
2 430
my.EXpr [?]
Необходимо сделать поиск любого возможного имени файла
Для этого можно использовать шаблон:

Код:
ConsoleWrite(_FileNameIsValid('file name.txt') & @LF)

Func _FileNameIsValid($sFileName)
	Return StringRegExp($sFileName, '^[^*?\\/|:<>"]+$')
EndFunc
 
Автор
M

my.EXpr

Provehito In Altum
Сообщения
7
Репутация
0
CreatoR [?]
Для этого можно использовать шаблон:
да, но хотелось бы ограничиться только стандартной латиницей и кириллицей (минуя подобные символы Ä, которые тоже возможны и воспринимаются ОС не чуть не хуже).
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
my.EXpr
Правильное имя это то, которое поддерживает система. Если нужено по своим понятиям, то тут только от фантазии зависит. А вообще используй RegExp, довольно наглядно показывает результаты и легко переключать режимы поиска и отправку в буфер готовой строки. До кучи справка и набор готовых семплов.
 
Верх