Показать сообщение отдельно
  #3 (permalink)  
Старый 23.01.2020, 13:19
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Dmitrij_Kh, вы не сможете в данном случае транслитерированный текст восстановить обратно, поскольку у вас: 1) происходит удаление символов, 2) некоторые транслитерированные символы имеют одинаковое значение. Вам лучше смотреть на эту проблему так — есть текст-источник, и есть преобразованный текст.
<form onsubmit="return false;" oninput="_translate(this);">
	<input type="text" name="text" />
	<label>
		<input name="transliterate" type="checkbox" checked />
		Транслитерация
	</label>
	<output name="transliterated-text"></output>
</form>
<script>
	const purgeText = string => string.replace(/(^\s+)|'|"|<|>|\!|\||@|#|$|%|^|\^|\$|\\|\/|&|\*|\(\)|\|\/|;|\+|№|,|\?|:|{|}|\[|\]/g, "");

	const textTransform = originalText => {
		let arrCyr = "Я,я,Ю,ю,Ч,ч,Ш,ш,Щ,щ,Ж,ж,А,а,Б,б,В,в,Г,г,Д,д,Е,е,Ё,ё,З,з,И,и,Й,й,К,к,Л,л,М,м,Н,н,О,о,П,п,Р,р,С,с,Т,т,У,у,Ф,ф,Х,х,Ц,ц,Ы,ы,Ь,ь,Ъ,ъ,Э,э, ".split(",");
		let arrLat = "Ya,ya,Yu,yu,Ch,ch,Sh,sh,Sh,sh,Zh,zh,A,a,B,b,V,v,G,g,D,d,E,e,YO,yo,Z,z,I,i,J,j,K,k,L,l,M,m,N,n,O,o,P,p,R,r,S,s,T,t,U,u,F ,f,H,h,C,c,Y,y,,,,,E,e,".split(",");
		let text = originalText;

		for (let i = 0; i < arrCyr.length; i++)
			text = text.replace(new RegExp(arrCyr[i], "g"), arrLat[i]);

		return purgeText(text).toUpperCase();
	};
	function _translate(form) {
		const text = form.elements.text.value;
		const sholdBeTransliterated = form.elements.transliterate.checked;
		const output = form.elements["transliterated-text"];

		output.value = sholdBeTransliterated ? textTransform(text) : text;
	}
</script>
<style>
	form {
		display: grid;
		max-width: 30em;
	}
	form output {
		border-top: thin dashed #789;
		padding-top: 1em;
		margin-top: 1em;
	}
</style>

Последний раз редактировалось Malleys, 23.01.2020 в 13:21.
Ответить с цитированием