Как проверить правильность введенного регулярного выражения в JavaScript? - PullRequest
0 голосов
/ 04 марта 2020

function regExChecker(str){
        const result =  (/^\w{3}(SQ|MI)[0-9]{5}$/i).test(str);
        return result;
    }
    
console.log(regExChecker("ABCSQ12345"))
console.log(regExChecker("XYZMI32134"))
console.log(regExChecker("ABCSQ"))

Теперь здесь выражение будет истинным для ABCSQ12345, XYZMI32134, et c. Но строка ABCSQ также верна, но не полностью соответствует выражению. Есть ли способ частично проверить строку с данным выражением?

Ответы [ 3 ]

0 голосов
/ 04 марта 2020

Для частичного отображения вы можете проверить до конца, что он все еще следует шаблону. Что вы можете сделать, это добавить и завершить проверку после каждого шаблона.

const check = str => (/^(\w{0,3}|$)((S|$)(Q|$)|(M|$)(I|$))([0-9]{0,5}|$)/i).test(str);

console.log(check("ABCSQ12345"));
console.log(check("ABCSQ"));
console.log(check("AB"));
console.log(check("AB12"));
console.log(check("ABCSM"));
0 голосов
/ 04 марта 2020

Вы можете сделать свое регулярное выражение /^\w{3}(SQ|MI)([0-9]{5})?$/i, сделать необязательные 0-5 цифр, добавив ?, а также заключить его в скобки, так как вы хотите захватить его.

const regex = /^\w{3}(SQ|MI)([0-9]{5})?$/i;

const case1 = 'ABCSQ12345';
const case2 = 'XYZMI32134';
const case3 = 'ABCSQ';
const case4 = 'Something Irrelevant';

let result;
if(result = case1.match(regex)) {
  // it will enter, and capture "12345"
  const capture = result[2];
  console.log('case 1:', capture);
}

if(result = case2.match(regex)) {
  // it will enter, and capture "32134"
  const capture = result[2];
  console.log('case 2:', capture);
}

if(result = case3.match(regex)) {
  // it will also enter, but capture is empty
  const capture = result[2];
  console.log('case 3:', capture);
}

if(result = case4.match(regex)) {
  // it will not enter here, since the given string doesn't match the pattern
  const capture = result[2];
  console.log('case 4:', capture);
}
0 голосов
/ 04 марта 2020

Вероятно, это то подтверждение, которое вы ищете:

var regex1 = /^\w{3}(sq|mi)\d{5}$/i;
var regex2 = /^(\w{1,3}|$)([sm]|$)([qi]|$)\d{0,5}$/i;

$('#toptid').keyup(function() {
  var ptIds = $("#toptid").val();

  if (regex2.test(ptIds)) {
    $('.toptError').text("");
  } else {
    $('.toptError').text("invalid Pattern");
  }
});

$('#toptid').focusout(function() {
  var ptIds = $("#toptid").val();

  if (regex1.test(ptIds)) {
    $('.toptError').text("");
  } else {
    $('.toptError').text("Wrong input");
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-md-8 col-xs-12 col-lg-8 col-xl-8">
  <div class="form-group mat-form" id="recipientsList">
    <label>Pattern<span class="req">*</span></label>
    <input type="text" name="topt" id="toptid" data-role="tagsinput" Placeholder="Enter Pattern" required>
    <span class="custom-invalid-feedback toptError"></span>
  </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...