2016-05-12 579 views
-1

試圖在任意字符串+劃線+ 8位數字的格式相匹配的網址:正則表達式匹配任意字符串+ 8位數字

yellow-purse-65788544 
big-yellow-purse-66784500 
iphone-smart-case-water-resistant-55006610 

我已經建立了這個這一個,但它不工作:

new RegExp(/^[a-z][A-Z]-\d{8}$/).test('big-yellow-purse-66784500'); // false 

你能幫我修理我破損的RegExp嗎?

+1

'-'需要'\'' – dandavis

+0

@dandavis仍然無法使用。 new RegExp(/^[a-z] [A-Z] \ - \ d {8} $ /)。test('big-yellow-purse-66784500'); – ChrisRich

+1

'/^[a-zA-Z \ - ] + - \ d {8} $ /',並且不會將它傳遞給RegExp(),不需要並且會打破東西 – dandavis

回答

0

該字符串不是完全任意的。它將是小寫的虛線字母數字。

您可以使用下面的正則表達式,這就排除了假陽性,其他答案不考慮(在Regex101詳述)的列表:

^(?:[a-z0-9]+-)+\d{8}$ 

Regex101

例建設:

document.body.textContent = /^(?:[a-z0-9]+-)+\d{8}$/.test('big-yellow-purse-66784500');

+0

此作品謝謝。 – ChrisRich

0

試試這個:

/^([a-zA-Z]*-)+\d{8}$/.test("iphone-smart-case-water-resistant-55006610"); 
0

您字符串有幾個破折號-),但正則表達式只是有最後一個,試試這個:

/^[a-z-]+-\d{8}$/im 

Rege X101演示

https://regex101.com/r/rT7xT0/1


正則表達式的解釋:

/^[a-z-]+-\d{8}$/im 

    ^assert position at start of a line 
    [a-z-]+ match a single character present in the list below 
     Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
     a-z a single character in the range between a and z (case insensitive) 
     - the literal character - 
    - matches the character - literally 
    \d{8} match a digit [0-9] 
     Quantifier: {8} Exactly 8 times 
    $ assert position at end of a line 
    i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z]) 
    m modifier: multi-line. Causes^and $ to match the begin/end of each line (not only begin/end of string) 

演示:

stringOne = "iphone-smart-case-water-resistant-55006610"; 
 
stringtwo = "big-yellow-purse-66784500"; 
 
stringThree = "iphone-smart-case-water-resistant-55006610222222"; 
 
var myregexp = /^[a-z-]+-\d{8}$/im; 
 

 
if(myregexp.test(stringOne)){ 
 
    document.write(stringOne + " - TRUE<br>"); 
 
}else{ 
 
    document.write(stringOne + " - FALSE<br>"); 
 
} 
 

 
if(myregexp.test(stringtwo)){ 
 
    document.write(stringtwo + " - TRUE<br>"); 
 
}else{ 
 
    document.write(stringtwo + " - FALSE<br>"); 
 
} 
 

 
if(myregexp.test(stringThree)){ 
 
    document.write(stringThree + " - TRUE<br>"); 
 
}else{ 
 
    document.write(stringThree + " - FALSE<br>"); 
 
}

0

如果字符串真的可以隨心所欲,你可以使用這個:

/^.*?-\d{8}$/i 

.+?爲任何字符的非貪婪匹配,並且\d{8}說精確匹配8位數字。

或者,你可以使用:

/^[\w-]+?-\d{8}$/i 

這個任意數量的 「字」 或匹配 ' - ' 字符,接着是 ' - ' 和8位。

這些都符合人類可讀的URL通常看到的情況,其中有多個' - '字符的順序,這可以通過轉換類似「Dollar $ ign money clip」到「dollar - ign-錢夾」。

相關問題