Hugo Vazquez Asked: 2020-01-21 20:30:24 +0800 CST 2020-01-21 20:30:24 +0800 CST 2020-01-21 20:30:24 +0800 CST Как сделать регулярное выражение, которое не допускает начального пробела? 772 Я ищу регулярное выражение, которое не допускает начального пробела, а после него — да, разрешает. javascript 1 Answers Voted Best Answer Mariano 2020-01-21T23:04:05+08:002020-01-21T23:04:05+08:00 Три варианта: 1. Совпадение с начальным пробелом, но отрицание всего результата: if ( !/^\s/.test(texto) ) { ^^^ el signo de admiración niega al resultado del método .test() ^- Соответствует позиции в начале текста. \s- (нижний регистр) соответствует 1 пробелу, [ \t\n\r\f]т.е. Не заблуждайтесь, восклицательный знак — это логический оператор JavaScriptnot , а не часть регулярного выражения. 2. Совпадение с непустым символом: /^\S/ ^- Соответствует позиции в начале текста. \S- (верхний регистр) соответствует 1 символу, отличному от , то есть \s, [^ \t\n\r\f]. Против: он не принимает пустые тексты. 3. Используйте отрицательный прогноз: /^(?!\s)/ ^- Соответствует позиции в начале текста. (?!.. )— это отрицательный просмотр вперед , то есть без использования символов он соответствует только в том случае, если шаблон внутри не совпадает. \s- Соответствует пустому месту. То есть все это регулярное выражение можно интерпретировать как: соответствует начальной позиции текста, если за ним не следует пробел Код (с повторяющимися структурами для упрощения): const regex1 = /^\s/; const regex2 = /^\S/; const regex3 = /^(?!\s)/; let input1 = document.getElementById("inp1"); let input2 = document.getElementById("inp2"); let input3 = document.getElementById("inp3"); let resultado1 = document.getElementById("res1"); let resultado2 = document.getElementById("res2"); let resultado3 = document.getElementById("res3"); //cuando cambia el texto del input input1.addEventListener("input", function() { //ver si NO coincide el regex /^\s/ if (!regex1.test(input1.value)) { resultado1.innerText = "(no coincide) -> Verdadero :-)"; } else { resultado1.innerText = "(coincide) -> ¡Falso!"; } }); input2.addEventListener("input", function() { //ver si coincide el regex /^\S/ if (regex2.test(input2.value)) { resultado2.innerText = "Coincide :-)"; } else { resultado2.innerText = "¡No coincide!"; } }); input3.addEventListener("input", function() { //ver si coincide el regex /^(?!\s)/ if (regex3.test(input3.value)) { resultado3.innerText = "Coincide :-)"; } else { resultado3.innerText = "¡No coincide!"; } }); <p>Prueba negando a <code>/^\s/</code>:</p> <input type="text" id="inp1"> <code id="res1" r></code> <p>Prueba de <code>/^\S/</code>:</p> <input type="text" id="inp2"> <code id="res2"></code> <p>Prueba de <code>/^(?!\s)/</code>:</p> <input type="text" id="inp3"> <code id="res3"></code>
Три варианта:
1. Совпадение с начальным пробелом, но отрицание всего результата:
^
- Соответствует позиции в начале текста.\s
- (нижний регистр) соответствует 1 пробелу,[ \t\n\r\f]
т.е.Не заблуждайтесь, восклицательный знак — это логический оператор JavaScript
not
, а не часть регулярного выражения.2. Совпадение с непустым символом:
^
- Соответствует позиции в начале текста.\S
- (верхний регистр) соответствует 1 символу, отличному от , то есть\s
,[^ \t\n\r\f]
.Против: он не принимает пустые тексты.
3. Используйте отрицательный прогноз:
^
- Соответствует позиции в начале текста.(?!
..)
— это отрицательный просмотр вперед , то есть без использования символов он соответствует только в том случае, если шаблон внутри не совпадает.\s
- Соответствует пустому месту.То есть все это регулярное выражение можно интерпретировать как: соответствует начальной позиции текста, если за ним не следует пробел
Код (с повторяющимися структурами для упрощения):