webew
Войти » Регистрация
 
PHP
HTML

Как запретить ввод кириллицы в текстовое поле?

15 ноября 2008, 20:09
Автор: Azazel
Есть поля "Логин" и "Пароль", куда не должны попадать символы кириллицы. Использую:

if(preg_match("/^([a-z,0-9])+@([a-z,0-9])+(.([a-z,0-9])+)+$/", $mail))
{
---

Вопрос следующий. Существует ли возможность ВООБЩЕ запретить ввод русских букв в поле?
Добавить комментарий
Отображение комментариев: Древовидное | Плоское

bur

Можно яваскриптом вырезать кириллицу по факту её ввода в текстовое поле, вот пример:

<script type="text/javascript">
function withoutCyr(input) {
    var value = input.value;
    var re = /а|б|в|г|д|е|ё|ж|з|и|ё|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я/gi;
    if (re.test(value)) {
        value = value.replace(re, '');
        input.value = value;
    }
}
</script>
<input type="text" onkeyup="return withoutCyr(this);" />
16.11.2008, 16:57
Ответить
NO USERPIC

Sign

А почему же не onkeypress ? ; )
16.11.2008, 18:08
Ответить
NO USERPIC

Azazel

Спасибо, первый вариант устроил полностью. Работает как надо. Вот только буковки одной не хватало:).
16.11.2008, 20:30
Ответить
NO USERPIC

rgbeast

буквы "й"?
16.11.2008, 21:32
Ответить
NO USERPIC

Sign

прошу прощения что не совсем по теме, но использовать
if(preg_match("/^([a-z,0-9])+@([a-z,0-9])+(.([a-z,0-9])+)+$/", $mail))

для отсечения кириллицы в логине или пароле - это грусно)
Многие мейлы, впрочем как и пароли не пройдут...

Не будет ли удобней Вашим юзерам если для отсечения недопустимых символов в логине и для проверки формата мейла Вы будете использовать разные регекспы?
Кстати, недопустимые символы в данном случае это не только кириллица ; )

Можно использовать например такие шаблоны
Недопустимые символы для мейла : /[^-_a-zA-Z\d\.@]/
Формат мейла: /^[^@\s\/\\]+@[^@\s\/\\]+\.[a-z]{2,}$/i

А вот пароль лучше вообще не трогать, а просто делать из него хеш.

А теперь по теме:
Первое решение вызывает перерисовку поля ввода, что кажется не очень эстетично.
Решение с onkeypress в чистом виде совсем не лаконично из-за предполагаемых требований кросбраузерности.
Возможно Вам может подойти решение с jQuery:
<form id="login_form">
    <input type="text" class="asci_only mail" name="login" />
    <input type="password" name="password" />
    <input type="submit" />
</form>

<script type="text/javascript">

$(document).ready( function(){
        $('input.asci_only').keypress( function(e) {
            return (e.keyCode) ? true : /[\w\d@\.]/.test(String.fromCharCode(e.charCode))
        });
       
        $('input.mail').change( function() {
            if(!validateEmail(this.value)){
                alert('Введите email')
                this.focus()
                return false
            }
            return true
        });
        $('#login_form').submit( function(){
            return $('input.mail').change()
        })
    })
   
    function validateEmail(email){
        return (email.search(/^[^@\s]+@[^@\s]+\.[^@\s]{2,}$/) == 0) ? true : false
    }
</script>
16.11.2008, 21:44
Ответить
NO USERPIC

Azazel

Да... А я наивный думал что жизнь-вещь не сложная. На счёт первого варианта - можно просто перетаскивать русскоязычный текст в поле. Незначительно, но все равно обидно. Буду пробовать вариант №2. Благо есть выбор.

/
rgbeast
буквы "й"?

- Вы снова правы
16.11.2008, 22:00
Ответить

bur

Можно и keypress.
16.11.2008, 22:18
Ответить

bur

Насчет регэкспов и допустимости тех или иных символов в полях - замечание верное.
А вот задача "запретить ввод кириллицы" в вашем jQuery-скрипте не решена. Она не такая тривиальная, проверьте свой пример в ИЕ.
16.11.2008, 23:16
Ответить
NO USERPIC

Sign

Упс... не досмотрел
вот:
$('input.asci_only').keypress( function(e) {
    if($.browser.msie)
        return isAsci(e.keyCode)
    else
        return (e.keyCode) ? true : isAsci(e.charCode)
});
function isAsci(cCode){
    return /[a-zA-Z0-9@\.]/.test(String.fromCharCode(cCode))
}
17.11.2008, 10:29
Ответить

bur

Да, в таком виде этот скрипт - идеальное решение для Azazel, спасибо :-)
17.11.2008, 12:50
Ответить
NO USERPIC

Sign

Вставку из буфера обмена Вы можете отслеживать в IE и в FF начиная с 3.0
Поэтому проще просто проверять форму перед отправкой, ведь Вам всё равно придётся это делать
17.11.2008, 13:06
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2024 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: