Как я могу принудительно ввести верхний регистр в текстовое поле ASP.NET?

Я пишу приложение ASP.NET. У меня есть текстовое поле в веб-форме, и я хочу заставить все, что пользователь вводит, использовать верхний регистр. Я бы хотел сделать это во внешнем интерфейсе. Вы также должны отметить, что в этом текстовом поле есть элемент управления проверкой, поэтому я хочу убедиться, что решение не мешает проверке ASP.NET.

Уточнение: Похоже, что преобразование текста CSS заставляет вводимые пользователем символы отображаться в верхнем регистре. Однако под капотом это все еще нижний регистр, поскольку элемент управления проверкой не работает. Видите ли, мой контроль проверки проверяет, введен ли действительный код состояния, однако используемое мной регулярное выражение работает только с заглавными буквами.

Вы намеренно ограничиваете свое регулярное выражение только работой с прописными буквами? Судя по вашей формулировке, вы можете не знать, что реализации регулярных выражений обычно поддерживают переключатель с учетом регистра.

J c 14.10.2008 23:27

Я не эксперт по регулярным выражениям. Я знаю способ поддерживать сравнение кода состояния в верхнем и нижнем регистре в регулярном выражении, а также дублировать каждый код состояния дважды (верхний и нижний). Я подумал, что будет чище просто преобразовать поле ввода в верхний регистр.

Aheho 14.10.2008 23:37

Не беспокойтесь - я бы рекомендовал использовать что-то вроде следующего (C#) вместо изменения пользовательского ввода: Regex re = new Regex ("myExpression", RegexOptions.IgnoreCase);

J c 17.10.2008 15:57

У меня такая же проблема. Я устанавливаю текстовое преобразование как верхний регистр, чтобы установить внешний вид текстового поля в соответствии с типами пользователя, и я использую событие onblur, чтобы установить значение в верхний регистр, когда текстовое поле теряет фокус. Однако валидатор недоволен значением. Вы нашли решение этой проблемы?

Fikre 18.03.2010 23:49

почему бы вместо этого не предоставить раскрывающийся список для кода состояния?

RandomUs1r 17.09.2014 21:10

@ RandomUs1r На мой взгляд, мне никогда не нравилось использовать раскрывающийся список для выбора состояния. Намного проще набрать NY, а затем найти «Нью-Йорк» в списке выбора.

Aheho 17.09.2014 21:54

@Aheho, если вы выберете NYC, выберите раскрывающееся меню в любом современном браузере и введите NY, вы получите NYC.

RandomUs1r 17.09.2014 23:01

Это не поможет, если вы показываете названия штатов в тексте, а «Нью-Джерси» и «Нью-Мексико» стоят перед «Нью-Йорк» в списке.

Aheho 17.09.2014 23:47

используйте Style = "text-transform: uppercase;" или CssClass = "upper"

Codeone 22.06.2016 07:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
33
9
109 414
20

Ответы 20

Используйте стиль CSS в текстовом поле. Ваш CSS должен быть примерно таким:

.uppercase
{
    text-transform: uppercase;
}

<asp:TextBox ID = "TextBox1" runat = "server" Text = "" CssClass = "uppercase"></asp:TextBox>;

Валидатор REGEX по-прежнему не работает с чисто CSS-решением.

Stephen Wrighton 15.10.2008 01:37

Установить стиль текстового поля как текст-преобразование: прописные буквы?

Прочтите разъяснение в самом вопросе. Это изменяет только внешний вид, но не базовое значение в текстовом поле.

Aheho 31.08.2011 21:26

В JavaScript есть строковая функция toUpperCase ().

Итак, что-то в этом роде:

function makeUpperCase(this)
{
    this.value = this.value.toUpperCase();
}

Это изменит его только после, нет, когда они его напечатают.

Diodeus - James MacFarlane 14.10.2008 23:02

Вы можете добавить эту функцию к событию onchange текстовой области, и она будет обновлять ее на лету, хотя это будет немного медленнее. CSS - это правильный путь ИМХО.

Tom 14.10.2008 23:20

@diodeus - если вы используете событие TextChange, то оно произойдет по мере их появления. @Tom - действительно ли CSS изменяет базовый ASCI или просто то, как он отображается?

Stephen Wrighton 15.10.2008 00:10

@Stephen - Хороший вопрос! Я создал небольшую страницу, чтобы проверить это, и похоже, что CSS изменяет только то, как он выглядит нет, лежащий в основе ASCII.

Tom 15.10.2008 01:18

@Tom - Я думал, что это должно происходить через JS, а не через CSS, чтобы валидатор сработал правильно.

Stephen Wrighton 15.10.2008 01:36

 style='text-transform:uppercase'

text-transform только изменяет внешний вид, он не переводит базовое значение в верхний регистр

Aheho 22.06.2016 21:21

Здесь может помочь CSS.

style = "text-transform: uppercase";"

это помогает?

text-transform только изменяет внешний вид, он не переводит базовое значение в верхний регистр

Aheho 22.06.2016 21:20

Используйте CSS с текстовым преобразованием для внешнего интерфейса, а затем используйте метод toUpper на стороне сервера перед проверкой.

Неисправный элемент управления проверкой выполняется на стороне клиента.

Aheho 14.10.2008 23:39

Я сделал что-то подобное сегодня. Вот модифицированная версия:

<asp:TextBox ID = "txtInput" runat = "server"></asp:TextBox>
<script type = "text/javascript">
    function setFormat() {
        var inp = document.getElementById('ctl00_MainContent_txtInput');
        var x = inp.value;
        inp.value = x.toUpperCase();
    }

    var inp = document.getElementById('ctl00_MainContent_txtInput');
    inp.onblur = function(evt) {
        setFormat();
    };
</script>

По сути, сценарий присоединяет событие, которое запускается, когда текстовое поле теряет фокус.

Я этого не понимаю. Откуда вы взяли идентификатор ctl00_MainContent_txtInput?

Aheho 15.10.2008 05:25

ASP.NET переводит ваши идентификаторы. Вы можете выяснить их, просмотрев исходный код страницы, с которой вы работаете. ctl00 - это общий префикс (но он может быть другим), MainContent - это просто имя формы, в которую был помещен элемент управления.

Jason Z 15.10.2008 07:36

Не могло ли это потенциально сломаться при переходе на более новую версию ASP.NET?

Aheho 15.10.2008 15:55

Возможно, но вы всегда можете использовать уникальное имя текстового поля и структуру JavaScript, такую ​​как jQuery, и найти элемент управления, в котором уникальное имя соответствует шаблону. Я старался, чтобы образец кода был простым.

Jason Z 15.10.2008 16:54

Есть лучший способ получить идентификатор клиента -> <% = TextBox1.ClientID%>. Это даст правильный идентификатор.

Cyril Gupta 28.08.2009 08:52

Почему бы не использовать комбинацию CSS и серверной части? Использовать:

style='text-transform:uppercase' 

в TextBox и в вашем коде используйте:

Textbox.Value.ToUpper();

Вы также можете легко изменить свое регулярное выражение на валидаторе, чтобы использовать строчные и прописные буквы. Это, вероятно, более простое решение, чем принудительное использование прописных букв.

Я бы пошел с ToUpper (). Почему вы хотите вводить такие ограничения для конечного пользователя? Это не дружественный интерфейс. Возьмите все, что дает вам пользователь, и сделайте это заглавными буквами самостоятельно.

Kon 15.10.2008 01:36

Я бы тоже это сделал. Возиться с Javascript до тех пор, пока вы не получите то, что вы хотите, - это гораздо больше работы, и вам потребуется включить Javascript, что просто не нужно с решением Роршаха.

Rob 07.09.2010 15:35

Вы можете перехватить события нажатия клавиш, отменить события нижнего регистра и добавить их версии в верхнем регистре к вводу:

window.onload = function () {
    var input = document.getElementById("test");

    input.onkeypress = function () {
        // So that things work both on Firefox and Internet Explorer.
        var evt = arguments[0] || event;
        var char = String.fromCharCode(evt.which || evt.keyCode);

        // Is it a lowercase character?
        if (/[a-z]/.test(char)) {
            // Append its uppercase version
            input.value += char.toUpperCase();

            // Cancel the original event
            evt.cancelBubble = true;
            return false;
        }
    }
};

Это работает как в Firefox, так и в Internet Explorer. Вы можете увидеть это в действии здесь.

Но это не сработает, если пользователь попытается ввести текст в середине текста.

erikkallen 27.09.2009 20:37

<!-- Script by hscripts.com -->
<script language=javascript>
    function upper(ustr)
    {
        var str=ustr.value;
        ustr.value=str.toUpperCase();
    }

    function lower(ustr)
    {
        var str=ustr.value;
        ustr.value=str.toLowerCase();
    }
</script>

<form>
    Type Lower-case Letters<textarea name = "address" onkeyup = "upper(this)"></textarea>
</form>

<form>
    Type Upper-case Letters<textarea name = "address" onkeyup = "lower(this)"></textarea>
</form>

Я бы сделал это с помощью jQuery.

<script src = "Scripts/jquery-1.3.2.js" type = "text/javascript"></script>
<script type = "text/javascript">
    $(document).ready(function() {
        $("#txt").keydown(function(e) {
            if (e.keyCode >= 65 & e.keyCode <= 90) {
                val1 = $("#txt").val();
                $("#txt").val(val1 + String.fromCharCode(e.keyCode));
                return false;
            }
        });
    });
</script>

У вас должна быть библиотека jQuery в папке /script.

кроме случаев, когда вы печатаете в середине текста

Anthony Shaw 08.03.2012 01:48

**I would do like:
<asp:TextBox ID = "txtName" onkeyup = "this.value=this.value.toUpperCase()" runat = "server"></asp:TextBox>**

Я понимаю, что это немного поздно, но я не смог найти хорошего ответа, который работал бы с ASP.NET AJAX, поэтому я исправил код выше:

function ToUpper() {
        // So that things work both on FF and IE
        var evt = arguments[0] || event;
        var char = String.fromCharCode(evt.which || evt.keyCode);

        // Is it a lowercase character?
        if (/[a-z]/.test(char)) {
            // convert to uppercase version
            if (evt.which) {
                evt.which = char.toUpperCase().charCodeAt(0);
            }
            else {
                evt.keyCode = char.toUpperCase().charCodeAt(0);
            }
        }

        return true;
    }

Используется так:

       <asp:TextBox ID = "txtAddManager" onKeyPress = "ToUpper()" runat = "server" 
             Width = "84px" Font-Names = "Courier New"></asp:TextBox>

Спасибо. Я разместил этот код в stackoverflow.com/questions/8026535/…. Ошибка при использовании команды вставки (Ctrl + V или из контекстного меню). Как заставить его работать и с командой вставки?

Andrus 06.11.2011 23:20

Я провел некоторый анализ этой проблемы в четырех популярных версиях браузеров.

  1. простой тег стиля отображает символы в верхнем регистре, но контрольное значение по-прежнему остается в нижнем регистре
  2. Функциональность нажатия клавиш с использованием кода char, показанного выше, немного беспокоит некоторых, поскольку в firefox chrome и safari он отключает функцию для Ctrl + V в элементе управления.
  3. другая проблема с использованием уровня символов в верхнем регистре также не переводит всю строку в верхний регистр.
  4. ответ, который я нашел, - реализовать это при нажатии клавиш вместе с тегом стиля.

    <-- form name = "frmTest" -->
    <-- input type = "text" size=100 class = "ucasetext" name = "textBoxUCase" id = "textBoxUCase" -->
    <-- /form -->
    
    window.onload = function() {
        var input = document.frmTest.textBoxUCase;
        input.onkeyup = function() {
            input.value = input.value.toUpperCase();
        }
    };
    

вот решение, которое сработало для меня.

http://plugins.jquery.com/project/bestupper

Вам нужно получить JavaScript от http://plugins.jquery.com/files/jquery.bestupper.min.js.txt, и готово.

Работает как шарм!

Хорошо, после тестирования вот решение получше и чище.

$('#FirstName').bind('keyup', function () {

    // Get the current value of the contents within the text box
    var val = $('#FirstName').val().toUpperCase();

    // Reset the current value to the Upper Case Value
    $('#FirstName').val(val);

});

Проблема с этим решением возникает, если пользователь завершает ввод данных, а затем думает о редактировании. Если использование исправляет и повторно набирает символ, тогда курсор снова устанавливается в конец строки, поскольку значение для текстового поля изменяется.

Nikhil 20.08.2018 12:11

  <telerik:RadTextBox ID = "txtCityName" runat = "server" MaxLength = "50" Width = "200px"
                            Style = "text-transform: uppercase;">

Я использую простой встроенный оператор

<asp:TextBox ID = "txtLocatorName" runat = "server"
 style = "text-transform:uppercase" CssClass = "textbox"  
 TabIndex = "1">
</asp:TextBox>

Если вы не хотите использовать классы css, вы можете просто использовать оператор встроенного стиля (этот просто явно заглавными буквами) :)

На стороне сервера использовать

string UCstring = txtName.Text.ToUpper();

Этот ответ был предоставлен, и причина, по которой его недостаточно, объясняется в вопросе.

EWit 19.06.2014 10:47

Это отлично. Кто-то другой может извлечь из этого пользу. Хотя я не думаю, что это нужно принимать.

Earth Engine 19.06.2014 10:55

text-transform только изменяет внешний вид, он не переводит базовое значение в верхний регистр.

Aheho 19.06.2014 16:25

     $().ready(docReady);

     function docReady() {

            $("#myTextbox").focusout(uCaseMe);
     }

     function uCaseMe() {

            var val = $(this).val().toUpperCase();

            // Reset the current value to the Upper Case Value
            $(this).val(val);
        }

Это многоразовый подход. Таким образом можно создать любое количество текстовых полей без имени. Решение для всей страницы может быть достигнуто путем изменения селектора в docReady.

В моем примере используется потерянный фокус, вопрос не указывал по мере набора. Вы можете инициировать изменение, если это важно для вашего сценария.

текстовое преобразование CSS property specifies how to capitalize an element's text. It can be used to make text appear in all-uppercase or all-lowercase

CssClass

Свойство WebControl.CssClass

вы можете узнать о нем больше - https://developer.mozilla.org/en/docs/Web/CSS/text-transform

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.cssclass(v=vs.110).aspx


использоватьStyle = "text-transform: uppercase;" или CssClass = "upper"

Где? Как это помогает? Любая ссылка?

dakab 22.06.2016 10:36

Вы, вероятно, не опубликовали бы это в качестве ответа, если бы это не сработало для вас. Однако где именно вы разместили эти атрибуты? Как вы узнали о text-transform или CssClass? Вы можете улучшить свой ответ, добавив подобную информацию.

dakab 22.06.2016 11:23

Другие вопросы по теме