Регулярное выражение для соответствия одной из длин, но ничего между ними [дубликаты]

Когда я хочу проверить, имеет ли входная строка длину не менее 10 и не более 13, я использую этот шаблон: [0-9]{10,13}

Но как бы вы проверили, равна ли длина строки 10 или 13 и ничего между ними?

РЕДАКТИРОВАТЬ: я вижу два доминирующих решения:

1) Использование длины1 ИЛИ длины2 2) Использование длины1 + необязательных символов (длина2 - длина1)

Просто интересно: есть ли разница в производительности между ними?


person Arman Bimatov    schedule 03.11.2013    source источник
comment
Ну, сложно определить строку поиска для такого вопроса.   -  person Arman Bimatov    schedule 04.11.2013
comment
@still_learning хорошая находка :)   -  person HamZa    schedule 04.11.2013
comment
@ArmanBimatov, вы можете проверить этот вопрос и этот твит :)   -  person HamZa    schedule 04.11.2013
comment
Не совсем тот же вопрос. Назначенный дубликат спрашивает, есть ли другое решение. Этот вопрос касается разницы в производительности между двумя решениями.   -  person Wayne Conrad    schedule 22.03.2014


Ответы (2)


Другой вариант был бы

^[0-9]{10}(?:[0-9]{3})?$

демонстрационная версия regex101

person jkshah    schedule 03.11.2013
comment
Не отрывайте решение от дубликата, у вас есть возможность закрыть его как дубликат :) - person HamZa; 04.11.2013
comment
@HamZa Извините, но я даже не видел дубликатов сообщений или ответов. Я пытался построить свое решение. Если вы верите, что все в порядке, если вы все еще нет, все в порядке. Может просто совпало. остальные 4 похожи, фактически одинаковы, это не значит, что они скопированы друг у друга! - person jkshah; 04.11.2013
comment
Я удалил свой ответ, так как все люди заполнили вопрос почти одним и тем же ответом, вы пришли с ответом, который не похож, и я нахожу это действительно творческим, если вы нашли его самостоятельно. Но не забудьте очистить stackoverflow. Ну вас же и не заставляют, а просто предлагают... - person HamZa; 04.11.2013
comment
@HamZa Если бы я увидел этот дубликат, я бы наверняка удалил свой ответ и разместил его в комментарии. Теперь, когда никто другой не разместил эту опцию, я хотел бы сохранить ее. Я не собираюсь заливать ТАК плагиатными ответами! - person jkshah; 04.11.2013

используйте это выражение ^((?:\d{3}){3,4}\d)$

person bukart    schedule 03.11.2013
comment
На самом деле, если вы проверите его, он вернет true для 12345678901 (что составляет 11 символов). - person Arman Bimatov; 04.11.2013
comment
исправил, попробуйте еще раз - person bukart; 04.11.2013