2012-01-30 3 views
12

У меня есть шаблон регулярного выражения, которая проверяет на трехзначное числоJavascript RegEx частичное совпадение

/^\d{3}$/.test("123") // true 
/^\d{3}$/.test("123.") // false 

Я хочу использовать это регулярное выражение как ограничение входного сигнала на текстовое поле.

В принципе, если новое значение соответствует, я разрешаю символу набирать, иначе я его предотвращу.

Проблема заключается в том, что никакая ценность никогда не будет соответствовать, поскольку «1» не является полным совпадением и не позволит мне вводить его.

Каким образом можно проверить частичное соответствие для regEx в javascript?

/^\d{3}$/.test("123") // true 
/^\d{3}$/.test("12") // "partial match" 
/^\d{3}$/.test("a12") // false 

РЕДАКТИРОВАТЬ

\ д {3} просто пример. Мне нужно использовать регулярное выражение для электронной почты или регулярное выражение для телефона в качестве ограничения ввода.

"email"  // true 
"[email protected]"  // true 
"[email protected]@"  // false 
"@yahoo.com" // false 

РЕДАКТИРОВАТЬ 2

У меня есть TextBox плагин с ограничением входного основанный на регулярном выражении.

Регулярное выражение может быть любым, шестнадцатеричный цвет Regex, например: (#) {1} ([а-FA-F0-9]) {6}

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

Например, если текстовое поле пуст, первым допустимым символом будет «#».

Но если я тестирую символ «#» в отношении регулярного выражения, он вернет «false», потому что «#» сам по себе недействителен.

/^(#){1}([a-fA-F0-9]){6}$/.test("#") // false 

Но в то же время, «#» является частичным недопустим, поскольку он уважает формат регулярных выражений (и я должен позволять пользователю вводить его)

Что мне нужно знать, если я могу проверить, если строка является частичным совпадением регулярного выражения, поэтому я могу позволить пользователю вводить символ.

/^(#){1}([a-fA-F0-9]){6}$/.test("#")  // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#0")  // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#00")  // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#000")  // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#0000") // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#00000") // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000") // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000D") // is not a match, prevent typing 
+0

У вас есть ответ на ваши вопросы? – user153

+0

Нет, нет ответа – Catalin

+0

Я столкнулся с аналогичной проблемой :) – user153

ответ

0

Вы можете указать диапазон в выражении так, чтобы он совпадал ничего от одной до трех цифр, как так:

/^\d{1,3}$/.test("1") // true 
/^\d{1,3}$/.test("12") // true 
/^\d{1,3}$/.test("123a") // false 
+0

Регулярное выражение, которое я использовал как пример. Обычно я использую регулярное выражение электронной почты или регулярное выражение для телефона, и я должен разрешить пользователю вводить «email @», но не разрешать ему набирать «email @@», например. – Catalin

0

Просто обеспечивают регулярное выражение, которое позволяет для частичного совпадения. например /^\d{1,3}$/

1

Вам будет лучше с помощью библиотеки, например maskedinput.js. Вы можете настроить входной текст как следующим образом:

jQuery(function($){ 
    $("#your_input").mask("999"); 
}); 

UPDATE

вы можете использовать validator для форм и заданных конкретных типов поле для проверки

+0

Плагин ввода скрытого ввода jquery используется для строк фиксированного размера. Мне нужно что-то общее. – Catalin

+0

@RaraituL, см. Обновление – epoch

+0

Да, но это что-то другое. Мне нужно «проверять» при нажатии клавиши не размытие. – Catalin

0

Согласно последнему редактированию, это должно работать:

/^#[a-fA-F0-9]{0,6}$/ 
+0

Да, но это все еще жестко закодировано. Мне нужен ответ «частично совпадать» из теста регулярных выражений. какое регулярное выражение используется. Что-то вроде этого [RegExPlus] (http://codesaway.info/RegExPlus/partial.html), которое для Java. – Catalin

+0

@RaraituL: см. мое редактирование, это то, что вы хотите? – Toto

+0

Он проверяет, но все еще жестко закодирован.У меня должно быть какое-то регулярное выражение, а не только случай электронной почты. Например, я могу захотеть иметь /^[aZ]{5}@?$/.test("email ") // true , и /^[aZ]{5}@?$/.test("email2 ") // false – Catalin

1

Вы можете частично утвердить e адрес электронной почты, используя ()? для большего количества букв и/или символов. Каждый ()? идет глубже в дереве валидации.

Следующий шаблон регулярного выражения проверяет адрес электронной почты письменно.

^[a-zA-Z]+(@{1}[a-zA-Z]*(\.{1}[a-zA-Z]*)?)?$ 

Он не учитывает все возможности там, но основные из них, как [email protected] она работает просто отлично, и есть место для улучшения его дальше.

0

Вы хотите использовать явные «|» частичные совпадения. Для вашего подбора цвета, например это довольно просто, вы просто должны явно соответствовать пустой частичной

/^(|#[a-f0-9]{0,6})$/i.test(inputStr) 

Для электронной почты это более сложный процесс, поскольку более частичные комбинации матча

/^(|\w+|\[email protected]|\[email protected]\w+|\[email protected]\w+\.|\[email protected]\w+\.\w+)$/.test(inputStr) 

Обратите внимание, что вы можете 't уйти с чем-то вроде /^(|\w*@|...)$/, так как соответствует @blah.com, что недействительный частичный ввод.

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