2013-09-16 5 views
1

Я пытаюсь создать регулярное выражение для десятичного числа, и в то же время знак «-» или «+» станет необязательным в начале.Регулярное выражение - знак +/- и десятичный знак

Есть много информации об этом, так как я закончил с этим:

/^[+-]?\d+(\.\d+)?$/ 

Итак, я проверил это в консоли с помощью функции test() и он прекрасно работает.

Мой вопрос о том, где сделать эту проверку:

  • , если проверка на keypress случае я в состоянии использовать preventDefault() для того, чтобы «потреблять» неправильные символы, но я извлечения текста как это и не имеет доступа к последнему введенному символу - $(event.target).val()

  • , если проверка на keyup случае у меня есть доступ ко всему тексту, но я не в состоянии удалить неправильный символ, потому что я не знаю, какое это и где он был вставлен (с помощью мыши i t может быть помещен в начало или в середину действительной строки)

Мне нужно проверить комбинацию символов, а не проверять только символы. Например:

- //invalid 
- 1 //valid 
1. //invalid 
1.2 //valid 

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

+0

Это регулярное выражение слишком многословен, '/^[+-]?\d+(\.\d+)?$/ 'короче и эквивалентнее. – Jon

+0

@ Джон, спасибо, ты прав. Мне просто нужно понять, что проблемы, с которыми я столкнулся, связаны с проверкой, а не с самим регулярным выражением, поэтому я многое изменил. Я исправлю это. – gotqn

+1

Я бы сказал, найти способ запросить пользователя «недопустимый номер» после того, как они попробуют ввести его и заставить их повторно ввести номер, или что-то на стороне окна ввода с «действительным» или «недействительным» показом (проверка будет сделана после каждого нажатия клавиши и изменения от действительного до недействительного и наоборот, поскольку введены больше символов). Я не знаю достаточно JS, чтобы помочь там, хотя! – Jerry

ответ

4

Ниже приведен один возможный способ сообщить пользователю, есть ли что-то не так с их вводом, поскольку они продолжают вводить. Click here для демонстрации примера.

Кроме того, мы также можем добавить <div> с указанием допустимых символов/формата. Это, в дополнение к тому, что пользователь узнает, что что-то не так, также расскажет им, что представляет собой допустимый ввод.

HTML:

<input id='ip' type='text'/> 

JS:

var regex = new RegExp(/^[+-]?\s*\d+(\.\d+)?$/); 

document.getElementById('ip').onkeyup = function(){ 
    var inputVal = this.value; 
    if(!(regex.test(inputVal))) this.className='err'; 
    else this.className='noerr'; 
} 

CSS:

.noerr{ 
    color: green; 
} 
.err{ 
    color: red; 
} 

Примечание: HTML5 имеет встроенные способы проверки ввода, а также имеет псевдоклассы, такие как :invalid и :valid, чтобы сделать то же, что и в приведенном выше примере. Если вы можете использовать HTML5, попробуйте this sample. Второе поле ввода выполняется с использованием HTML5 (не требуется JS).

HTML5:

<input id='iphtml5' pattern='[+-]?\s*\d+(\.\d+)?' type='text' /> 

CSS:

#iphtml5:valid{ 
    color: green; 
} 
#iphtml5:invalid{ 
    color: red; 
} 
Смежные вопросы