Как запретить не алфавитно-цифровые символы в ColdFusion с помощью RegEx - PullRequest
2 голосов
/ 15 ноября 2011

Я использую ColdFusion 9.0.1.

Я пытаюсь проверить, предоставил ли пользователь не буквенно-цифровое значение.Если они есть, я хочу вернуть ложь.Я почти уверен, что я близок, но я продолжаю получать ошибку:

Complex object types cannot be converted to simple values.

Я пробовал несколько способов сделать эту работу, но я не могу заставить ее работать.

В частности, я хочу разрешить только от a до z и от 0 до 9. Без пробелов или специальных символов.

Можете ли вы помочь мне настроить это?

    <cfscript>
        LOCAL.Description = trim(left(ARGUMENTS.Description, 15));
        if (len(LOCAL.Description) lte 4) {
            return false;
        } else if (reMatchNoCase("[^A-Za-z0-9_]", LOCAL.Description) neq "") {
            return false;
        } else {
            return true;
    </cfscript>

W

Ответы [ 3 ]

4 голосов
/ 15 ноября 2011

reMatchNoCase возвращает массив, который нельзя сравнить со строкой, используйте ArrayLen () для результата, чтобы выяснить, есть ли совпадения

В вашем коде есть еще одна проблема. Первая строка выдаст ошибку, если длина описания меньше 15, что означает, что первый IF устарел, поскольку он всегда будет ложным.

2 голосов
/ 15 ноября 2011

Вы также можете попробовать следующий подход:

<cfscript>
    local.description = trim(local.description);
    return reFind("(?i)^[A-Z0-9_]{5,}$", local.description)?true:false;
</cfscript>
2 голосов
/ 15 ноября 2011

reMatchNoCase ("[^ A-Za-z0-9_]", LOCAL.Description) neq ""

Это потому, что ReMatchNoCase возвращает массив, а не простойстрока.Либо проверьте длину массива, либо, что еще лучше, используйте ReFindNoCase.Возвращает позицию первого совпадения или 0, если она не была найдена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...