2017-08-27 58 views
1

我試圖使用Regular Expression to Validate UK Number Plates但我不知道如何,我知道一大堆jQuery,但我沒有處理過正則表達式,這是我的。如何使用此正則表達式來檢查值?

$('button#headerevalsubmit').click(function(){ 
    var headcarreg = $('input#headerevalcarreg'); 
    headcarreg.filter(function() { 
     return this.value.match('(?<Current>^[A-Z]{2}[0-9]{2}[A-Z]{3}$)|(?<Prefix>^[A-Z][0-9]{1,3}[A-Z]{3}$)|(?<Suffix>^[A-Z]{3}[0-9]{1,3}[A-Z]$)|(?<DatelessLongNumberPrefix>^[0-9]{1,4}[A-Z]{1,2}$)|(?<DatelessShortNumberPrefix>^[0-9]{1,3}[A-Z]{1,3}$)|(?<DatelessLongNumberSuffix>^[A-Z]{1,2}[0-9]{1,4}$)|(?<DatelessShortNumberSufix>^[A-Z]{1,3}[0-9]{1,3}$)'); 
    }); 

}); 

但我不斷收到無效的表達,我不知道爲什麼,我的目標是簡單地檢查,看是否有文本框的輸入是一個有效的英國號牌。

任何幫助將不勝感激。

+1

你剛剛從網上覆制了那個正則表達式,它看起來並不像一個正則表達式,它在javascript中是有效的 – adeneo

+0

我從Gist中複製它,只是不確定如何在JQuery中使用它或Javascript:/ – M0n5terBunny

+0

JS正則表達式不支持命名組。你究竟需要什麼?如果你只是刪除組,你會得到[這個表達式](https://regex101.com/r/yQNHbX/4)。它可以[縮小一點](https://regex101.com/r/yQNHbX/3/),但它只會匹配與其中一個替代品匹配的完整字符串。您將無法區分它是否是任何具體格式。 –

回答

1

您可以製作模式通過刪除所有命名的捕獲組與JavaScript的正則表達式兼容的,如果你在檢查只是有興趣,如果給定的英國號牌是有效的:

var uk_plate_number = /^(?:[A-Z]{2}[0-9]{2}[A-Z]{3}|[A-Z][0-9]{1,3}[A-Z]{3}|[A-Z]{3}[0-9]{1,3}[A-Z]|[0-9]{1,4}[A-Z]{1,2}|[0-9]{1,3}[A-Z]{1,3}|[A-Z]{1,2}[0-9]{1,4}|[A-Z]{1,3}[0-9]{1,3})$/; 
return uk_plate_number.test(this.value); 

regex demo

請注意,該場景中正則表達式的結構會發生變化,以避免重複操作:^...$|^...$ =>^(?:...|...)$(?:...)是一個非捕獲組,它使^$適用於替代組中的每個備選項。

+1

謝謝,完美的作品。 – M0n5terBunny