Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   В чём разница? (https://javascript.ru/forum/dom-window/79114-v-chjom-raznica.html)

Янковиц 19.12.2019 13:08

В чём разница?
 
Добрый день. Есть два похожих кода:
1
$(document).on('change keyup input click oninput', 'input', function() {
	let pattern = $(this).data( 'pattern' );
	if ( pattern !== '' && pattern !== 'undefined' ) {
		this.value = this.value.replace( pattern, '' );
	}
});

2
$(document).on('change keyup input click oninput', 'input', function() {
	let pattern = $(this).data( 'pattern' );
	if ( pattern !== '' && pattern !== 'undefined' ) {
		this.value = this.value.replace( /[^а-яА-Яa-zA-Z\s]/g, '' );
	}
});

Во втором случае выполняется валидация, а в первом нет. В обоих случаях pattern в console.log показывает /[^а-яА-Яa-zA-Z\s]/g. В чём причина?

рони 19.12.2019 13:19

Янковиц,
в одном случае pattern String(последовательность символов) в другом RegExp(шаблон для поиска).

Янковиц 19.12.2019 13:28

И как тогда String привести к RegExp?

рони 19.12.2019 13:28

RegExp from pattern
 
Янковиц,
$(document).on('change keyup input click oninput', 'input', function() {
	let pattern = $(this).data( 'pattern' );
	if ( pattern !== '' && pattern !== 'undefined' ) {
        let [_, pattern , flags] = pattern.split('\/');
		this.value = this.value.replace( new RegExp(pattern , flags), '' );
	}
});

laimas 19.12.2019 13:30

В первом случае pattern, это строка, чтобы она стала шаблоном рег. выражения нужно

let pattern = eval($(this).data( 'pattern' ));


А лучше держать в атрибуте сам шаблон, а в обработчике

let pattern = new RegExp($(this).data( 'pattern' ), 'g');

Янковиц 19.12.2019 13:30

Спасибо большое

Янковиц 19.12.2019 13:46

Ещё один вопрос. В шаблоне прописаны допустимые буквы: а-яА-Яa-zA-Z, но не пропускает буквы öçğ и другие
Как прописать эту ситуацию?

рони 19.12.2019 13:56

Янковиц,
:-?
добавить нужное

Янковиц 19.12.2019 14:05

Я заведомо не знаю, какие буквы ещё могут использоваться

рони 19.12.2019 14:13

Янковиц,
пропишите ненужные символы[-_=+\d] вместо [^a-z]


Часовой пояс GMT +3, время: 05:50.