2013-02-12 76 views
-2

這是用於驗證我的系統上的用戶名。由「。-_」分隔的單詞的正則表達式,包括至少一個字母

每個用戶名都可以包含這些符號「。-_」,但由上述符號分隔的單詞不能僅爲數字。

一個例子是

無效:

123.as-as123 
123.AS-aS123 

有效期:

a123.as-as123 
A123.AS-aS123 
+0

你的用戶名可以不包含任何這些符號嗎?或者它必須包含所有這些?並且這些符號中的任何一個都可以回到原點? – 2013-02-12 11:32:25

+0

@RohitJain它可以是其中的任何一個。 – Peymankh 2013-02-12 11:32:53

回答

2

我相信這會工作,如果我正確地理解您的需求:

/^(?:[a-z0-9]*[a-z][a-z0-9]*[.\-_])*[a-z0-9]*[a-z][a-z0-9]*$/i 

它匹配零個或多個以.,-_結尾且至少需要一個字母的字母/數字組。然後它匹配最後一組字母/數字,至少需要一個字母。

它不區分大小寫(這就是最後的i),所以它也會匹配大寫字母。 (這個語法至少在Perl和PHP中起作用,在其他語言中,可能需要以稍微不同的方式應用此選項,但不區分大小寫總是可用的)。

人們可能會傾向於縮短這樣的:

/^(?:[a-z0-9]*[a-z][a-z0-9]*[.\-_]?)+$/i 

然而,這是不太理想的,因爲使[.\-_]可選使得它在它可以嘗試搭配方式太多的靈活性。它可能需要運行一個失敗模式的大量案例。

+0

我想我應該在問題中提到,它也可以包含大寫字母。我會更新這個問題。答案是正確的。但是請包括大寫字母。 – Peymankh 2013-02-12 11:37:44

+0

@Peymankh,我用的'/ i'開關也允許大寫。 – 2013-02-12 11:40:01

+0

是的你是對的。對不起沒有注意到它。謝謝。 – Peymankh 2013-02-12 11:40:57

0

你可以使用這4個正則表達式來檢查。

^([0-9]*?)[\.\-\_]   // Check if number is present between start and symbols 
[\.\-\_]([0-9]*?)[\.\-\_] // Check if number is present between these symbols 
[\.\-\_]([0-9]*)$   // Check if number is present between these symbols and eol 
^([0-9]+)$     // Check only if number is present 

如果其中任何一個的輸出是「否」,則打印無效,否則有效。

相關問題