2017-05-25 133 views
1

我使用正則表達式如下驗證IP address pattern無效:模式驗證是IP地址的正則表達式

/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/ 

我也檢查了它在regex tester,它工作正常。

但是,當我在模式驗證器中使用它時,有效的IP地址(例如:128.129.80.66)不會被識別爲有效。

app.component.ts:

export class AppComponent implements OnInit { 

     testForm: FormGroup; 
     constructor(private fb: FormBuilder) {} 

     ngOnInit(): void { 
     const ipPattern = 
     '/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/'; 
     this.testForm = this.fb.group({ 
      inp: ['128.129.80.66', Validators.pattern(ipPattern)] 
     }); 
     } 
    } 

app.component.html

<form novalidate [formGroup]="testForm"> 
    <input formControlName="inp"/> 
    {{testForm.status}} 
</form> 

其結果是:

The result

這段代碼有什麼問題?

回答

1

由於您使用Validators.pattern,你並不需要手動錨定模式(無需字邊界,角度會附上與^$自動整個模式),你需要用字符串字面量增加一倍正確地定義它逃避反斜槓,否則它們將被JS刪除。

使用

const ipPattern = 
    "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; 

你可以在剛剛結束的情況下,要保持模式明確(它不會做任何傷害有兩個^在模式開始添加^開始和$$$最後,只要引擎會檢查兩次字符串位置的開始/結束位置)。

:如果您有交替更爲複雜的模式,它是用^和自角度自動錨固這些模式$明確不使用可選的非捕獲組包圍整個模式是一個好主意,它只是將^$附加到提供的模式。