https://jsfiddle.net/thepirat000/w26shjrm/243/#save

by thepirat000

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://api-maps.yandex.ru/2.1/?lang=ru-RU"></script>


<div>Find Address</div>
<input type="text" id="suggest" name="suggest-name" style="width: 600px" value=""/>
<input type="button" id="validate" value="validate" style="display:none;"/>

<p id="result">
</p>

<div id="parts">
  <div>Country: <input id="country" type="text" readonly /></div>
  <div>Province: <input id="province" type="text" /></div>
  <div>Area: <input id="area" type="text" /></div>
  <div>Locality: <input id="locality" type="text" /></div>
  <div>Street: <input id="street" type="text" /></div>
  <div>House: <input id="house" type="text" /></div>
  <div>Postal Code: <input id="postal" type="text" /></div>
  <input type="button" id="validateInputs" value="validate inputs"/>
</div>

JavaScript

ymaps.ready(initYandex);

function initYandex() {
	//https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/SuggestView.html
  var suggestView = new ymaps.SuggestView('suggest', {
    offset: [10, 10]
  });
  
  suggestView.events.add('select', function (r) {
    validateSuggest(r);
  });

$('#validateInputs').bind('click', function (e) {
     validateInputs();
  });
}

async function validateSuggest(result) {
	console.log("Res");
	console.log(result.get('item').value);
	await validate($("#suggest").val());
}

async function validateInputs() {
	let request = [$("#country").val(), $("#province").val(), $("#area").val(),
    $("#locality").val(), $("#street").val(),  $("#house").val(),
    $("#postal").val()].filter(x => x).join(', ');
	await validate(request);
}

async function validate(request) {
  $("#parts input[type=text]").val("");
  $("#result").text("");
  if (!request) {
    return;
  }
  $("#result").text("Validating...");
  //console.log(request);
  let response = await ymaps.geocode(request, {
  	results: 1
   });
  var item = response.geoObjects.get(0);
  if (!item) {
    return;
  }
  let metadata = item.properties.get('metaDataProperty.GeocoderMetaData');
  console.log(JSON.stringify(metadata));
  let kind = metadata.kind;
  let error = "";
  let ok = false;
  switch (metadata.precision) {
    case 'exact':
      ok = true;
      break;
    case 'number':
    case 'near':
    case 'range':
    case 'street':
      error = 'Incomplete. Specify house number';
      break;
    case 'other':
    default:
      error = 'Incomplete. (' + kind + ')';
  }
  $("#result").text(ok ? 'OK!' : error).css('color', ok ? 'green' : 'red');
  let address = item.properties.get('metaDataProperty.GeocoderMetaData.Address');
  let postalCode = address.postal_code;
  console.log(JSON.stringify(address.Components));
  let components = address.Components.reduce((a,x) => ({...a, [x.kind]: x.name}), {});

  $("#country").val(components.country); 	
 ...