2013-08-21 3 views
1

EDIT: Спасибо всем за ваши данные. Все, что вы ответили, было правильным. Но я подумал, что не объяснил это достаточно ясно.Регулярное выражение для проверки содержит только

Я хочу проверить входное значение во время ввода самого себя. Если пользователь вводит любой другой символ, которого нет в списке, введённый символ следует отбросить назад.

(Я не хочу проверять, как только введен весь ввод).

      Я хочу проверить поле ввода даты, которое должно содержать только символы 0-9[digits], -(hyphen) , .(dot), и /(forward slash) .Date может быть, как должна быть сделана на любом возникновении или положение 22/02/1999 или 22.02.1999 или 22-02-1999 проверки .No. Простой проверки достаточно, чтобы проверить, имеет ли он другой символ, чем перечисленные выше символы. [Я плохо разбираюсь в регулярных выражениях.]

Вот что я думал, должно работать, но нет.

var reg = new RegExp('[0-9]./-'); 

Вот jsfiddle.

+0

После правки: возможно дубликат [Можно ли заблокировать определенный символ или группу символов от входа в текстовое поле или любое поле ввода с помощью JQuery?] (HTTP://stackoverflow.com/questions/2500620/is-it-possible-to-block-a-certain-character-or-group-of-characters-from-entering) –

+0

Но этот ответ сообщения проверяет только символы, но не символы, такие как ./- тоже ... –

+1

Да, это вам решать, чтобы придумать правильное выражение. Кажется, вы задаете два вопроса в своем вопросе сейчас: (1) Как проверить, содержит ли строка определенные символы, и (2) как предотвратить ввод символов. Для выражения вы найдете ответы ниже. Другой вопрос - дубликат связанного с вопросом. –

ответ

6

Ваше выражение только проверяет, является ли везде в строке, цифра следует любой символ (. is a meta character) и /-. Например, 5x/- или 42%/-foobar будут соответствовать.

Вместо этого, вы хотите поместить все символы в character class и проверить, является ли каждый символ в строке является один из них:

var reg = /^[0-9.\/-]+$/ 
  • ^ matches the start of the string
  • [...] матчи, если символ содержится в группе (т.е. любая цифра, ., / или -).
    / должен быть экранирован, так как он также обозначает конец литерала регулярного выражения.
    - между двумя символами описывает диапазон символов (между ними, например 0-9 или a-z). Если - находится в начале или в конце, это не имеет особого значения, и буквально интерпретируется как дефис.
  • + is a quantifier и означает «один или несколько, если предыдущий шаблон». Это позволяет нам (вместе с анкерами) проверять, находится ли каждый символ строки в классе символов.
  • $ соответствует концу строки

В качестве альтернативы, вы можете проверить, есть ли символ, не один из дозволенных:

var reg = /[^0-9.\/-]/; 

В ^ в начале класс символов отрицает его.Здесь нам не нужно проверять каждый символ строки, потому что существование только символа отличается от уже недействительной строки.

Вы можете использовать его так:

if (reg.test(str)) { // !reg.test(str) for the first expression 
    // str contains an invalid character 
} 
+0

В вашей второй маркерной точке вы можете упомянуть, что '-' должен быть в конце (или начале) набора символов, в противном случае он должен быть экранирован, потому что он имеет особое значение между символами – Ian

2

Если вы не обеспокоены действительности даты, вы можете легко использовать регулярное выражение:

^[0-9]{1,2}[./-][0-9]{1,2}[./-][0-9]{4}$ 

Класс символов [./-] позволяет любому один из символов в квадратных скобках и квантификаторы допускают либо 1 или 2 цифры месяцев и дат, но только 4 цифры лет.

Вы также можете сгруппировать несколько первых групп, как так:

^([0-9]{1,2}[./-]){2}[0-9]{4}$ 

Обновлено ваш fiddle с первым регулярным выражением.

3

Попробуйте это:

([0-9]{2}[/\-.]){2}[0-9]{4} 
+1

Не забывайте, что'^$ ', и не нужно избегать тире в классе, если оно находится в начале или в конце его. Кроме того, вы можете использовать '\ d' вместо' [0-9] 'и не захватывающие группы. Все это вместе: '^ (?: \ D {2} [./-]) {2} \ d {4} $' – sp00m

Смежные вопросы