Частичное совпадение 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
Ответы
Ответ 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
, который не является допустимым частичным входом.