Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.03.2023, 12:01
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Регулярное выражение не понимает кириллицу. Как исправить?
Есть простой скрипт, исправляющий небольшие ошибки за пользователями. Если пользователь поставил после точки строчную букву скрипт делает её заглавной. Работает, но необходимо, чтобы скрипт не делал буквы заглавными после аббревиатур типа и т.д. и т.п. В регулярном выражении на кириллицу скрипт не реагирует, но работает на латинице и не поднимает букву после t.d. Помогите, пожалуйста, исправить. Код следует.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>

<script>
function replaceChars(entry) {

var obj = document.forms[0].elements[entry];
var str = obj.value;

var re = /(?<!t\.d)\. \S/g; // После точки слова начинаются с большой буквы если это не аббревиатуры
while(x = re.exec(str)) str = str.replace(x[0], x[0].toUpperCase());

obj.value = str;
}
</script>

<form>

<p>Text</p>
<textarea id="text" name="text" style="width:80%; height:400px;" required>Слова после точки начинаются с Заглавной буквы, если это не аббревиатуры типа и т.д. и т.п. как вы поняли и t.d. после которых ставить заглавную не надо. этот текст нужно исправить. и поставить заглавные буквы правильно.</textarea>
<p><a href="#" onclick="replaceChars('text'); return false;">Fix!</a></p>

</form>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 24.03.2023, 13:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

javascript_pupil,
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Test</title>
</head>
<body>
    <script>
        function replaceChars(entry) {
            var obj = document.forms[0].elements[entry];
            var str = obj.value;
            var re = /(?<!(т\.д|т\.п|t\.d))\. \S/g; // После точки слова начинаются с большой буквы если это не аббревиатуры
            str = str.replace(re, a => a.toUpperCase())
            obj.value = str;
        }
    </script>
    <form>
        <p>Text</p>
        <textarea id="text" name="text" style="width:80%; height:400px;" required>Слова после точки начинаются с Заглавной буквы, если это не аббревиатуры типа и т.д. и т.п. как вы поняли и t.d. после которых ставить заглавную не надо. этот текст нужно исправить. и поставить заглавные буквы правильно.</textarea>
        <p><a href="#" onclick="replaceChars('text'); return false;">Fix!</a></p>
    </form>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 24.03.2023, 13:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

javascript_pupil,
про run не забывайте

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #4 (permalink)  
Старый 24.03.2023, 18:08
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Сообщение от рони
про run не забывайте
Понял. Искал, сделал сначала HTML, потом JS, но оба не сработали. Теперь ясно.

Код работает, спасибо! Два вопроса остались:
1. Можно ли сделать эту конструкцию IE11* совместимой?
2. Почему всё-таки кириллица не работала, когда латиница нормально?

* Как по мне, так IE11 гораздо более быстрый, надежный и удобный, чем многие "современные" браузеры на новых движках. Не зря все монстры типа M$ & CF на него ополчились. Говорят небезопасный, но для администрирования своих собственных сайтов вполне подходит.
Ответить с цитированием
  #5 (permalink)  
Старый 24.03.2023, 18:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

javascript_pupil,
Ретроспективная проверка
Цитата:
Lookbehind не поддерживается в браузерах построенных не на движке V8, таких как Safari и Internet Explorer.
Ответить с цитированием
  #6 (permalink)  
Старый 24.03.2023, 18:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от javascript_pupil
1. Можно ли сделать эту конструкцию IE11* совместимой?
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Test</title>
</head>
<body>
    <script>
        function replaceChars(entry) {
            var obj = document.forms[0].elements[entry];
            var str = obj.value;
            var re = /(\S+)(\. \S)/g;
            str = str.replace(re, function(a, b, c) {
                if (!/(т\.д|т\.п|t\.d)$/.test(b)) c = c.toUpperCase();
                return b + c
            })
            obj.value = str;
        }
    </script>
    <form>
        <p>Text</p>
        <textarea id="text" name="text" style="width:80%; height:400px;" required>Слова после точки начинаются с Заглавной буквы, если это не аббревиатуры типа и т.д. и т.п. как вы поняли и t.d. после которых ставить заглавную не надо. этот текст нужно исправить. и поставить заглавные буквы правильно.</textarea>
        <p><a href="#" onclick="replaceChars('text'); return false;">Fix!</a></p>
    </form>
</body>
</html>

Сообщение от javascript_pupil
2. Почему всё-таки кириллица не работала, когда латиница нормально?
где код?
Ответить с цитированием
  #7 (permalink)  
Старый 24.03.2023, 18:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

javascript_pupil,
https://caniuse.com/js-regexp-lookbehind
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно написать регулярное выражение на проверку двух последних символов? s24344 Элементы интерфейса 1 15.01.2020 10:20
Проверка e-mail регулярное выражение mycoding Общие вопросы Javascript 4 09.02.2017 10:12
Как написать регулярное выражение, которое будет возвращать строку? Armen Общие вопросы Javascript 2 09.10.2014 22:29
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
регулярное выражение theo_ Общие вопросы Javascript 15 21.06.2010 10:29