Нет пробелов в начале и конце строки - PullRequest
1 голос
/ 24 июня 2019

В моем приложении Angular (Typescript) я хочу проверить input по пробелам в начале и в конце введенного пользователем значения.

Следующее регулярное выражение ^[^\s].+[^\s]$ и его RegExp эквивалент /[^\s].+[^\s]/ - самый распространенный ответ, который я нашел. Но функция test этого регулярного выражения не возвращает правильное логическое значение.

Какой правильный RegExp возвращает false, если строка содержит пробелы в начале, в конце или в обоих?

function myFunction(){
var myStr=document.getElementById("reader").value;
var regex1=/[^\s].+[^\s]/;
var regex2=new RegExp('[^\s].+[^\s]','i');
var result1=regex1.test(myStr);
var result2=regex2.test(myStr);

document.getElementById("writer1").value=result1;
document.getElementById("writer2").value=result2;
}
<input id="reader" type="text" placeholder="string" onChange="myFunction()"/>
<p> regex:<input type="text" id="writer1"/></p>
<p> with constructor:<input type="text" id="writer2"/></p>

1 Ответ

1 голос
/ 24 июня 2019

Используя первый шаблон ^[^\s].+[^\s]$ ваша строка должна содержать не менее 3 символов, поскольку класс отрицательных символов требует совпадения, а .+ будет соответствовать 1+ раз любому символу, кроме новой строки.

Второй шаблон [^\s].+[^\s] не привязан и также допускает частичное совпадение.

Если вы также хотите сопоставить a или aa, вы можете использовать отрицательный обходной путь, чтобы утверждать, что строка не заканчивается пробелом или табуляцией, и начинать совпадение с непробельным символом.

^(?!.*[ \t]$)\S.*$
  • ^ Начало строки
  • (?!.*[ \t]$) Отрицательный взгляд, утверждаем, что справа не пробел или табуляция в конце строки
  • \S Соответствует непробельному символу
  • .* Соответствует любому символу 0+ раз, кроме новой строки
  • $ Конец строки

Regex demo

...