Подтвердить что ты не робот

Проверка формы допускает только символы английского алфавита

Я хотел бы ограничить ввод формы, вводя неанглийские символы. Например, все китайцы, японцы, кирлики, но и отдельные символы, такие как: à, â, ù, û, ü, ô, î, ê. Возможно ли это? Должен ли я настраивать локаль в моем приложении MVC или, скорее, выполнять проверку правильности текстового поля регулярного выражения? Просто боковое примечание, я хочу иметь возможность вводить числа и другие персонажи. Я просто хочу, чтобы это исключало письма.

Прошу совета, спасибо.

4b9b3361

Ответ 1

Для этого вам нужно использовать свойства и блоки символов Unicode. Каждая точка кода Юникода присвоила некоторые свойства, например. этот пункт - Письмо. Блоки представляют собой диапазоны кодовой точки.

Подробнее см.

Эти свойства и блоки Unicode записываются \p{Name}, где "Имя" - это имя свойства или блока.

Если это верхний регистр "P", такой как \p{Name}, то это отрицание свойства/блока, то есть оно соответствует чему-либо еще.

Есть, например, некоторые свойства (только короткий отрывок):

  • L == > Все буквы.
  • Lu == > Letter, Uppercase
  • Ll == > Letter, Lowercase
  • N == > Все номера. Это включает категории Nd, Nl и Нет.
  • Pc == > Пунктуация, коннектор
  • P == > Все знаки пунктуации. Сюда входят категории Pc, Pd, Ps, Pe, Pi, Pf и Po.
  • Sm == > Символ, математика

Есть, например, некоторые блоки (только короткий отрывок):

  • 0000 - 007F == > IsBasicLatin
  • 0400 - 04FF == > IsCyrillic
  • 1000 - 109F == > IsMyanmar

Что я использовал в решении:

\P{L} - свойство символа, которое сопоставляет любой символ, который не является буквой ( "L" для буквы)

\p{IsBasicLatin} - это блок Unicode, который соответствует кодовым точкам 0000 - 007F

Итак, ваше регулярное выражение будет:

^[\P{L}\p{IsBasicLatin}]+$

Простыми словами:

Это соответствует строке от начала до конца (^ и $), когда есть (по крайней мере один) только не буквы или символы из таблицы ASCII (точки выполнения 0000 - 007F)

Короткий метод тестирования С#:

string[] myStrings = { "Foobar",
    "[email protected]!\"§$%&/()",
    "Föobar",
    "fóÓè"
};

Regex reg = new Regex(@"^[\P{L}\p{IsBasicLatin}]+$");

foreach (string str in myStrings) {
    Match result = reg.Match(str);
    if (result.Success)
        Console.Out.WriteLine("matched ==> " + str);
    else
        Console.Out.WriteLine("failed ==> " + str);
}

Console.ReadLine();

Печать

соответствует == > Foobar
сопоставлено == > Foo @bar!\"§ $% &/()
failed == > Föobar
failed == > fóÓè

Ответ 2

Вы можете использовать атрибут Regular Expression на ViewModel для ограничения этого

public class MyViewModel
{
    [System.ComponentModel.DataAnnotations.RegularExpression("[a-zA-Z]+")]
    public string MyEntry
    {
       get;
       set;
    }
}

Ответ 3

Вы можете использовать регулярное выражение [\x00-\x80]+ или [\u0000-\u0080]+. Не тестировали, но думаю, что он должен работать и на С#.

Адаптировано из: Регулярное выражение для соответствия неанглийским символам?

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

Ответ 5

это может помочь, а не эффективно, но простая проверка не-reg

foreach (char c in inputTextField)
{
       if ((int)(c) > 127)
          {
             // expection or your logic whatever you want to return
          }

 }