Jochen Arndt
Это происходит потому, что вы забыли экранировать закрывающую квадратную скобку в группе символов и что они должны быть дважды экранированы (так что обратная косая черта помещается в строку, чтобы ее видел анализатор регулярных выражений):
wrong: "[!/\[]:;|=,+*<>]*"
correct: "[!/\\[\\]:;|=,+*<>]*"
Вам также не нужно преобразовывать входные данные в ANSI при использовании
wregex
класс, предоставляемый Visual C++:
bool ValidateLoginid(const CString& inputString)
{
std::wregex stringpattern(L"[!/\\[\\]:;|=,+*<>]*");
return !std::regex_match(inputString.GetString(), stringpattern);
}
Обратите также внимание, что я изменил параметр на ссылку const, чтобы избежать передачи по значению и указать, что он не изменен.
Также нет необходимости использовать регулярное выражение, Если вы хотите только проверить, присутствуют ли определенные символы или нет. Тогда просто используйте
strstr
или
CString::FindOneOf
.
Member 13089825
Привет,я пробовал это,но это не ошибка thorwing, когда я даю test+, test>(Если я даю комбинацию, то это не бросает ошибку)
bool ValidateLoginid(const CString& inputString)
{
std::wregex stringpattern(L"[!/\\[\\]:;|=,+*<>]*");
return !std::regex_match(inputString.И getString(), stringpattern);
}
Jochen Arndt
Как также предлагали другие, вы должны заменить последний символ соответствия '*' на '+' или '+?'.
Я не могу на самом деле проверить это здесь и написал свое решение из ума.
Однако я бы просто использовал
if (inputString.FindOneOf(_T("!/[]:;|=,+*<>")) >= 0)
// error: string contains unallowed character
Member 13089825
неправильно: "[!/\[]:;|=,+*<>]*"
правильно: "[!/\\[\\]:;|=,+*<>]*"
можно ли проверить правильность шаблона или нет с помощью vc++ mfc