Вы не можете получить доступ к флагу переполнения от C/C++.
Некоторые компиляторы позволяют Вам вставлять инструкции по прерыванию в код. На GCC опция является-ftrapv (но я должен признать, что никогда не использовал его. Проверит его после регистрации).
единственное портативное устройство и компилятор независимая вещь, которую можно сделать, состоит в том, чтобы проверить на переполнение самостоятельно. Точно так же, как Вы сделали в своем примере.
Редактирование:
Просто проверенный:-ftrapv, кажется, ничего не делает на x86 с помощью lastest GCC. Угадайте, что это - перенесенный от старой версии или характерный для некоторой другой архитектуры. Я ожидал, что компилятор вставит В код операции после каждого дополнения. К сожалению, это не делает этого.
Вам может потребоваться указать, что вся строка должна соответствовать:
validates_format_of :username, :with => /^[-a-z]+$/
Вам также может потребоваться заменить ^ на \ A и $ на \ Z, если вы не хотите сопоставлять новую строку в начале / конце. (спасибо BaroqueBobcat )
Добавление i приведет к совпадению без учета регистра. (спасибо Омару Куреши ).
(Я также изначально не использовал +
: спасибо Чаку )
[] может содержать несколько «правил», поэтому [a-z0-9] дает строчные буквы и цифры
как специальный символ - должен стоять в начале правила
Дает ли
[-a-z0-9@_.]
желаемый эффект?
validates_format_of :username, :with => /^[\w\-@]*$/
Обратите внимание на *, что означает «0 или более». '
Просто измените регулярное выражение, чтобы оно соответствовало всем символам, указанным в вашей спецификации ( \ w
охватывает все буквенно-цифровые символы - буквы и цифры - и подчеркивание).
validates_format_of :username, :with => /[\w \.\-@]+/