kumarravishankar Ответов: 2

Как написать регулярное выражение, которое будет принимать все символы, кроме ' и "


В текстовом поле нужно фильтровать только " и ", кроме " и " , он будет принимать все символы, специальные символы, буквенно-цифровые

Что я уже пробовал:

строка FreeTextRegEx { get { return @"^[a-zA-Z-0-9~+:;,/#&_@*%$!()\[\] ]*$"; } }

2 Ответов

Рейтинг:
2

OriginalGriff

Хм. Если я правильно вас понял, вы хотите принять все, кроме кавычек и двойных кавычек?
Если это так, то все просто:

^[^'"]*$
Будут делать это


kumarravishankar

public override string FreeTextRegEx { get { return @"^[a-zA-Z-0-9~+:;,/#&_@*%$!()\[\] ]*$"; } }

но при использовании
public override string FreeTextRegEx { get { return @"^[^'"]*$"; } }
получаю ошибку

OriginalGriff

И почему ты так думаешь?
Подсказка: что делает одна двойная кавычка в строке?

Bryian Tan

Вы должны использовать две двойные кавычки, чтобы избежать двойной кавычки

@"^[^'""]*$";

public override string FreeTextRegEx { get { return @"^[^'""]*$"; } }

kumarravishankar

согласно требованию не разрешили в текстовом поле,

Рейтинг:
1

BillWoodruff

... новое решение ...

Чтобы предотвратить ввод пользователем этих символов во время выполнения, а также перехватить событие "вставить" и удалить эти символы, вы можете использовать UserControl:

using System.Text;
using System.Windows.Forms;

namespace YourNameSpace
{
    public partial class NoQuoteTextBox : TextBox
    {
        private const int WM_PASTE = 0x0302;

        private StringBuilder sb;

        public NoQuoteTextBox()
        {
            InitializeComponent();
        }

        protected override void WndProc(ref Message msg)
        {
            if (msg.Msg != WM_PASTE)
            {
                // good to go here
                base.WndProc(ref msg);
            }
            else
            {
                // handle paste
                sb = new StringBuilder(Clipboard.GetText());

                if (sb.Length > 0)
                {
                    sb.Replace("\'", string.Empty);
                    sb.Replace("\"", string.Empty);

                    if (sb.Length > 0)
                    {
                        Clipboard.SetText(sb.ToString());
                        base.WndProc(ref msg);
                    }
                }
            }
        }

        // handle user keyboard entry at run-time
        private void NoQuoteTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = e.KeyChar == '\'' || e.KeyChar == '\"';
        }
    }
}


.. предыдущее решение ...

Почему бы не запретить ввод этих символов ?
private void SomeTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == '\'' || e.KeyChar == '\"')
    {
        e.Handled = true;
    }
}


OriginalGriff

Вставить?

BillWoodruff

Если вы спрашиваете, вставил ли я этот фрагмент, то ответ будет "да". я также написал его и проверил: что-то с ним не так ? спасибо, Билл

OriginalGriff

Нет, Билл, я имел в виду, что блокировка клавиш quote и double quote не мешает пользователю вставлять символы.

Я должен помнить, что не следует использовать когитативные ярлыки ... :смеяться:

BillWoodruff

А-а, ладно :) Я понимаю вашу точку зрения; пример, конечно, не справляется с пастой.

BillWoodruff

@OriginalGriff

Если теперь пересмотренное решение не соответствует вашим спецификациям, мы получаем развод :)