2016-06-30 82 views
0

我非常感謝以下正則表達式的一些幫助。 我需要正則表達式來驗證以下規則: 輸入可以包含字母,特殊字符和數字。 輸入不能以 「0」 開始, 輸入最多可以有7個位數正則表達式,允許字符和數字,但最多隻允許7位數字

有效輸入的

例子:無效的輸入的

aa1234aa2.(less than 7 digits) 
asd234566 (less than 7 digits) 

例子:

0asdfd92 (starts with 0) 
asd12312311 (more than 7 digits) 

我迄今爲止嘗試:

^\D[0-9]{0,7}$, 

驗證對d0000000,但輸入可以d0d0dddd1234d

的部分不能用0可以從需求,如果它變得複雜了很多被移除啓動。最重要的是擁有「最多可以有7位數」的部分。

問候, 奧列格

+0

因此,即使'abc1'對你是一個有效的輸入? – anubhava

+0

是的,abc1是一個有效的輸入 –

+0

但是這與n.1的要求相矛盾'不能以'0'開頭,允許使用字母或特殊字符.'我把它寫爲「根本不允許使用字母」 – nagyben

回答

2

這是你需要的東西!

Attempt 1: ^[1-9]\d{0,6}$ 
Attempt 2: ^[^0][\d\w]{0,6}$ 
Attempt 3: ^[^0].{0,6}$ 
Attempt 4: ^([\D]*\d){0,7}[\D]*$ 
Attempt 5: ^([\D]*[1-9]){0,7}[\D]*$|^[^0]\d{0,6}$ 
Attempt 6: ^([\D]*[1-9]){1,7}[\D]*$|^[^0]\d{1,6}$ <- this should work 

Example here

+0

謝謝,但字符串可能以不同於數字的開始 –

+0

'不能以「0」開始,允許字母或特殊字符。「您能否澄清規則? – nagyben

+0

嗨,我剛剛做了 –

0

你可以使用這個表達式:

^[^0](?:\D*\d){1,7}\D*$ 

RegEx Demo

這將執行以下驗證:

  1. 必須與非從零開始
  2. 擁有第一炭
0

後1至7位數。如果我理解正確的要求,這將工作:

^(?=[^0])(\D*\d){0,7}\D*$ 

這將允許不以零開始,並有7個任意字符串或更少的數字。任何數量的任何其他字符都是允許的。

說明

第一部分(?=[^0])是檢查,以確保該字符串不以零開始的斷言。其餘的匹配任何數字的非數字後面跟一個數字,最多7次。然後在字符串結尾之前有任意數量的非數字。

0

詳細,但伎倆。

(^[1-9][^\d]*([\d]?[^\d]*){0,6}$|^[^\d]+([\d]?[^\d]*){0,7}$)

我發現它更容易將正則表達式分成兩種情況:當字符串以數字開頭,當它沒有。

1

假設的Perl(它看起來像Perl的正則表達式):

  1. 檢查前導零:if (subst($pass, 0, 1) eq '0') { fail }
  2. 檢查不超過七位數字:if (($pass =~ tr /0-9/0-9/) > 7) { fail }

通常我反對試圖將所有東西都塞進一個單一的正則表達式中,尤其是當有其他工具可用來完成這項工作時。在這種情況下,如果存在前導零,則tr將不會被執行,並且前導零在字符串的開頭很容易被發現。

這樣做,很容易添加進一步的限制獨立於其他限制。例如,「如果所有字符都被其他類型的字符分隔,可能會有7位以上的數字」(這可能是一個正則表達式)。

0
^((?:\D+(?:\d?\D*){0,7})|(?:[1-9]\D*(?:\d?\D*){0,6}))$ 

您可以測試它here

相關問題