2014-10-29 4 views
0

Я пытаюсь проверить IPv4-адрес в своей форме с ненавязчивой проверкой. Все остальные проверки работоспособны, но это примечание работает.Проверка IPv4 с использованием regex

Я определил модель собственности, как это:

[RegularExpression(ipAdressRegEx, ErrorMessageResourceName = "IPInvalid", ErrorMessageResourceType = typeof(Strings))] 
public virtual String IP { get; set; } 

И мой RegEx:

private const string ipAdressRegEx = @"/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g"; 

Сгенерированный HTML выглядит так:

<input class="k-textbox" data-val="true" data-val-regex="Invalid IP" 
data-val-regex-pattern="/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g" 
id="IP" name="IP" type="text" value=""> 
<span class="field-validation-valid" data-valmsg-for="IP" data-valmsg-replace="true"></span> 

Но проверка показывает ошибку недопустимый IP-сообщение erro, например, к ip = "192.168.1.1".

Если я ставлю следующее в консоли браузера:

"192.168.1.1".match(/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g) 

(Использование шаблона передается в проверке входных данных) он возвращает IP-адрес, который является правильным.

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

Я попытался с различными узорами ...

+0

Я думаю, что проблема из-за '/ G' модификатора, который JavaScript-специфический я считаю. Возможно, проверка ASP.NET MVC использует другой метод для сопоставления на стороне клиента, а не метод 'match', который вы тестируете. И на стороне сервера этот модификатор не поддерживается точно – Andrei

ответ

2

Сыпучие косая черта и g вариант указать в строке. Это разметки JavaScript для регулярного выражения. Не требуется, когда вы передаете регулярное выражение через API.

data-val-regex-pattern="\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" 
0

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

http://blogs.msdn.com/b/tilovell/archive/2013/05/08/regular-expressions-are-different-in-javascript-and-unintrusive-validation.aspx

1

вы можете создать метод, как,

private boolean checkIp(String ipValue,String regex){ 
    return ipValue.matches(regex); 
} 

checkIp(yourIpValue, "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 
          + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 
          + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 
          + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$") 
-1
function ValidateIPaddress(ipaddress) 
{ 
    if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ipaddress)) 
    { 
     return (true) 
    } 
    alert("You have entered an invalid IP address!") 
    return (false) 
} 
Смежные вопросы