Проблема с ^\D*(?!
заключается в том, что даже если длинная цифра / пробел будет найдена в отрицательном поиске, часть, соответствующая \D
, будет просто возвращать один символ после совпадения отрицательного просмотра , Например, когда
^\D*(?!\d{10,}).*
соответствует
abc1234567890
\D*
соответствует ab
, а .*
соответствует c1234567890
. Позиция между b
и c
не является немедленно , за которой следует длинная подстрока числа / пробела, поэтому совпадение не может быть неудачным.
Кроме того, поскольку некоторые цифры могут приходить до 10 последовательных цифр, ^\D*
в начале будет недостаточно - например, что, если вводится 1a01234567890
? Вместо этого попробуйте
^(?!.*(\d\s*){10}).*
Это гарантирует, что за каждой позицией не следует (10 цифр, возможно разделенных пробелами).
https://regex101.com/r/v7t4IC/1
Если цифры могут входить только в один блок (возможно, разделенный пробелами) в строке, ваш шаблон сработал бы, если бы вы находились в среде, которая поддерживает собственнические квантификаторы, которые предотвращают возврат назад, например:
^\D*+(?!(\s*\d\s*){10,}).*
^
https://regex101.com/r/eGdw2l/1
(но Javascript, к сожалению, не поддерживает такой синтаксис)