Соответствие одному из нескольких символов последней позиции значения ввода HTML

Проблема:

У меня есть следующий код как часть формы.

<input type = "text" pattern = "[0|3|7]+$" title = "Value must end in either 0, 3 or 7" required>

При попытке отправить форму она должна быть отправлена ​​правильно только в том случае, если значение ввода заканчивается на 0, 3 или 7.

В настоящее время он не работает должным образом и будет соответствовать только следующим значениям:

  • 0
  • 3
  • 7

Если во входных данных есть какой-либо другой символ, он не будет совпадать.

Примеры / демонстрации:

Демо: http://jsfiddle.net/9of0w2cm/

Демонстрация работы регулярного выражения: https://regexr.com/3sii4

Примеры, которые должны совпадать:

  • 1.0
  • 1.3
  • 7.3
  • 8.7

Примеры, которые не должны совпадать:

  • 1.1
  • 1.5
  • 7.9
  • 8.2

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

Вам нужен pattern = ".*[037]"

Wiktor Stribiżew 17.07.2018 17:55
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

шаблон уже привязан по умолчанию, поэтому [0|3|7]+$ будет соответствовать 037 или каналу от начала до конца строки.

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

(?:[0-9]\.)*[037]

Объяснение

  • (?:[0-9]\.)* Повторить в группе, не выполняющей захват, цифру, за которой следует ноль или более раз.
  • [037] Соответствует 0, 3 или 7 с использованием класс персонажа

Чтобы сопоставить одну или несколько цифр перед точкой и одну или несколько цифр после точки, вы можете использовать [0-9]+\.[0-9]*[037].

Чтобы сопоставить одну цифру, точку и одну цифру, вы можете использовать [0-9]\.[037]

<form id = "" name = "">
  <input type = "text" pattern = "(?:[0-9]\.)*[037]" title = "Value must end in either 0, 3 or 7" required>
  <input type = "submit" name = "submit">
</form>

Я думаю, что в вашем ответе есть ошибка, которая находится там [0-9]\.)*, это регулярное выражение не соответствует большему числу, чем 9, повторяющееся число с точкой, как этот 1.2.3, я думаю, что ожидаемое значение - это 12.3, а не 1.2.3, поэтому, если вы хотите просто число перед конечным значением я предлагаю \d*\.[037], и если вы хотите использовать какие-либо другие символы перед конечным значением, я предлагаю .*\.[037].

Azhy 17.07.2018 19:22

@Azhy Мой ответ основан на данных примера, в котором используются цифры и точки. .*\.[037] также будет соответствовать, но точка соответствует любому символу. В случае, если повторяющаяся группа не совпадает с точкой, а только один раз, точка с несколькими цифрами до и после OP может использовать [0-9]+\.[0-9]*[037] или с одной цифрой после [0-9]+\.[037]. Ваше предложение \d*\.[037] также соответствует первой точке, например .7.

The fourth bird 17.07.2018 19:50

Другие вопросы по теме