Подтвердить что ты не робот

Частичное совпадение 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

ИЗМЕНИТЬ

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

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

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

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

Регулярное выражение может быть любым, шестнадцатеричным Regex, например: (#) {1} ([a-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
4b9b3361

Ответ 1

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

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

UPDATE

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

В соответствии с последним правлением это должно работать:

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

Ответ 6

Вы хотите использовать явные "|" частичные совпадения. Для вашего примера соответствия цвета это довольно просто, вам просто нужно явно сопоставить пустую строку partial

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

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

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

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