Эквивалент Java "LookingAt ()" в .net? - PullRequest
2 голосов
/ 26 января 2009

В Java есть функция регулярного выражения "LookingAt ()", которая разрешает частичное сопоставление с шаблонами, мой вопрос:

Имеет ли .net эквивалент «LookingAt ()»?

Я могу или не могу использовать его для валидации KeyPress, но я просто хотел бы узнать об этом в будущем.

Заранее спасибо

Jon

Ответы [ 4 ]

3 голосов
/ 27 января 2009

Я не думаю, что lookingAt() является правильной моделью для того, что вы пытаетесь сделать. Все, что он делает, это привязывает совпадение к началу ввода, как если бы вы использовали ^ start anchor в начале вашего регулярного выражения и вызывали find(), и это было бы тривиально для эмуляции в .NET.

Я думаю, что вы пытаетесь запретить пользователям вводить неверные данные. Например, если текстовое поле ожидает десятичное число с двумя десятичными знаками, регулярное выражение проверки может быть \d+\.\d\d. Если пользователь начинает с ввода цифры, регулярное выражение не совпадает, но цифра может быть частью действительной записи, поэтому вы можете позволить им продолжать вводить. Но если пользователь вводит «z», вы блокируете его, потому что он никак не может быть частью допустимой записи.

Другими словами, вы не хотите знать, соответствует ли регулярное выражение части строки, вы хотите знать, соответствует ли строка части регулярного выражения. В Java есть способ сделать это, используя метод hitEnd(), но я не думаю, что .NET имеет аналог для этого. На самом деле, я не знаю ни одного другого аромата регулярных выражений.

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

Вот демонстрация hitEnd():

import java.util.regex.*;

public class Test
{
  public static void main(String[] args) throws Exception
  {
    Pattern p = Pattern.compile("\\d+\\.\\d\\d");
    Matcher m = p.matcher("");
    String[] tests = { "5.99", "5", "@" };
    for (String s : tests)
    {
      if (m.reset(s).matches())
      {
        System.out.println("full match");
      }
      else if (m.hitEnd())
      {
        System.out.println("partial match");
      }
      else 
      {
        System.out.println("no match");
      }
    }
  }
}

Я получаю «полное совпадение» для первой строки, «частичное совпадение» для второй и «нет совпадения» для третьей.

1 голос
/ 26 января 2009

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

Regex emailregex = new Regex("(?<user>[^@]+)@(?<host>.+)");
        string s = "email@address.com";

        Match m = emailregex.Match(s);


        if (m.Success)
        {

        do something here


}
1 голос
/ 26 января 2009

Это может не относиться к вашему случаю, но в целом это не очень хорошая идея, потому что некоторые языки часто нуждаются в комбинированных клавишах для ввода символов: «â» часто набирается клавишами ^ и a. Если вы хотите разрешить только буквенно-цифровые клавиши и включить â, вы можете запретить их ввод, если не разрешите ^.

0 голосов
/ 26 января 2009

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

// Эта функция отключает клавишу ввода, так что пользователь не может ввести кучу пробелов. функция kH (e) { var pK = e? e.which: window.event.keyCode; return pK! = 13; } document.onkeypress = kH; if (document.layers) document.captureEvents (Event.KEYPRESS);

На этой странице перечислены все коды клавиш для вашей клавиатуры. 13 было для клавиши ввода, поэтому в этой функции я разрешаю все клавиши! = До 13

http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001686.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...