Что нового

[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,669
Репутация
2,463
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,762
Репутация
1,152
my.EXpr
Правильное имя это то, которое поддерживает система. Если нужено по своим понятиям, то тут только от фантазии зависит. А вообще используй RegExp, довольно наглядно показывает результаты и легко переключать режимы поиска и отправку в буфер готовой строки. До кучи справка и набор готовых семплов.
 
Верх