У меня есть следующий код как часть формы.
<input type = "text" pattern = "[0|3|7]+$" title = "Value must end in either 0, 3 or 7" required>
При попытке отправить форму она должна быть отправлена правильно только в том случае, если значение ввода заканчивается на 0, 3 или 7.
В настоящее время он не работает должным образом и будет соответствовать только следующим значениям:
037Если во входных данных есть какой-либо другой символ, он не будет совпадать.
Демо: http://jsfiddle.net/9of0w2cm/
Демонстрация работы регулярного выражения: https://regexr.com/3sii4
Примеры, которые должны совпадать:
1.01.37.38.7Примеры, которые не должны совпадать:
1.11.57.98.2В чем проблема, из-за которой регулярное выражение не соответствует ожидаемым результатам?






шаблон уже привязан по умолчанию, поэтому [0|3|7]+$ будет соответствовать 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 Мой ответ основан на данных примера, в котором используются цифры и точки. .*\.[037] также будет соответствовать, но точка соответствует любому символу. В случае, если повторяющаяся группа не совпадает с точкой, а только один раз, точка с несколькими цифрами до и после OP может использовать [0-9]+\.[0-9]*[037] или с одной цифрой после [0-9]+\.[037]. Ваше предложение \d*\.[037] также соответствует первой точке, например .7.
Вам нужен
pattern = ".*[037]"