Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение с зачисткой (https://javascript.ru/forum/misc/34565-regulyarnoe-vyrazhenie-s-zachistkojj.html)

Quieteroks 10.01.2013 12:46

Регулярное выражение с зачисткой
 
Здравствуйте.

Суть проблемы в том, что нужно контролировать формы на вводимый бред.
Если нужно разрешить вводить только цифры, то тут просто регуляркой режу все ненужное:
var str = jQuery(this).val();
if(!(/^[0-9]*$/.test(str))) {
	jQuery(this).val(str.replace(/^[0-9]*/,''));
}
// З.Ы. Честно от куда то стырено...


А теперь стал вопрос сложнее.
В поле нужно ввести текст в формате XXXX00000, найти такое чудо я смог, а вот как зачистить все лишнее...
var str = jQuery(this).val();
if(!(/\w{4}\d{5}/.test(str))) {
	jQuery(this).val(str.replace(/\w{4}\d{5}/,''));
}


Подскажите, куда копать?
Делать карманы и по отдельности каждый карман чистить?
Тогда не будет соблюден формат.
И опять таки, наверно и поиск организуется неверно.

Deff 10.01.2013 12:50

Цитата:

Сообщение от Quieteroks
В поле нужно ввести текст в формате XXXX00000,

Приведите несколько реальных входных строк

Quieteroks 10.01.2013 12:54

Deff,

AAAA00057
BBBB00210
ADNB34238

Примерно такие варианты.

Deff 10.01.2013 13:09

Quieteroks,
Приведите так же для каждой строки итоговый, "очищенный вид"

Quieteroks 10.01.2013 13:18

Deff,
Так это и есть итог.
А на вход могут завести:
BBB888
DGDK0222

Но это еще ничего страшного.
Главное чтоб некоторые могут вставить русские буквы.
В целом конечно для упрощения можно зарезать все символы, кроме \w\d, но тогда формат и длина не соответствуют.

Вот прям не знаю, как лучше делать.

nerv_ 10.01.2013 13:24

Цитата:

Сообщение от Quieteroks
Подскажите, куда копать?

http://www.books.ru/books/regulyarny...626982/?show=1

Deff 10.01.2013 13:41

Quieteroks,
Еще раз:
Приведите пару входных "неочищенных" строк и напротив каждой итоговый вид очищенной строки

Quieteroks 10.01.2013 13:54

nerv_,
Ух какая интересная книжка. Обязательно прочитаю.

Deff,
Я даже уже начинаю сомневаться в правильности подхода...
Когда начинаю задумываться, как это организовывать и что должно быть на выходе. Наверно в данном случае буду усложнять/упрощать процедуру.
Проще чистить вводные символы по нажатию кнопки, т.е. запретить кириллицу. Несоответствие формату, регулярка для проверки имеется, можно по итогам заполнения проверить и сообщить об ошибочности действий.

Спасибо за наводящий вопрос.

Deff 10.01.2013 14:40

<input type="text" onkeyup="noTxt(this)" oninput="noTxt(this)" onkeydown="noTxt(this)"/>

<script type="text/javascript">
function noTxt(a){
  var b=a.value;
  var c=b.replace(/\D/,'');
   if(b!=c){a.value=c; alert("Вводим только цифры!!!");setTimeout(function noTxt(){a.value=c},299);};
}
</script>

рони 10.01.2013 18:18

Цитата:

Сообщение от Quieteroks
AAAA00057
BBBB00210
ADNB34238

Вариант...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<script src="http://code.jquery.com/jquery-latest.js"></script>
<title></title>
</head>
<body>
<input name="test" id="test"/>
<script type="text/javascript">
$("#test").on("keyup blur", function () {
    var str = $(this).val(), reg = "[A-Z] [A-Z] [A-Z] [A-Z] [0-9] [0-9] [0-9] [0-9] [0-9]".split(" "),
    len = str.length > reg.length ? reg.length : str.length;
    for (var a = 0; a < len && RegExp(reg[a]).test(str.charAt(a)); a++);
    $(this).val(str.slice(0, a))
});
</script>
</body>
</html>


Часовой пояс GMT +3, время: 07:33.