2012-01-19 40 views
13

誰能告訴我如何爲一個字符串寫入Regex字符串中的正則表達式,這樣的字符串必須和應該有alpha+numeric(即字母和數字)字符。極品必須有數字和字母字符

有效期:

a123sss 
12dfgfd 

無效:

aaaa 
1111 

我想這^[a-zA-Z0-9]*$,但它總是給true

編輯:這也是正確的:123-abc

+2

似乎這個問題會幫助你:http://stackoverflow.com/questions/1051989/regex-for-alphanumeric-but-at-least-one-character – Niklas

+0

這是無效的或有效的:'1234abcd'? – Abel

+0

'ABel'有效的小改變,即使我可以得到像'-'這樣的特殊字符,你可以給我那個 – Chaitanya

回答

31

這聽起來好像你說的串既需要字母和數字字符:它不能隻字母字符,或僅數字字符。

因此,字符串必須是:

  • 的一個或多個數字字符,接着是一個或多個字母字符,接着0或多個字母數字字符

  • 一個或多個字母字符,後跟一個或多個數字字符,後跟0個或更多字母數字字符racters

因此,其工作的正則表達式是

^([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*$ 
+3

好的第一個答案,+1。歡迎來到SO! – stema

+0

嗨'Patchi'你是否可以爲這個案例提供呢'123-abc' – Chaitanya

+0

的確很好的答案。你可以用'\ d'代替'[0-9]',如果你想允許á,ê,ç,ß,»,ł,ħ,dž等等(在許多國家有效的必要字母),使用'\ p {L}'而不是[a-zA-Z]。 – Abel

0

如果你只是想確保它同時包含數字和字母(和你不關心它是否包含其他字符和)你可以使用:

/\[0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+/ 
1

我不知道asp.net支持先行,但如果這樣做,這個正則表達式做這項工作:

^(?=.*[0-9])(?=.*[a-zA-Z])[a-zA-Z0-9]+$ 
+0

ASP.NET支持lookahead。這個略短的版本應該也可以工作:'^(?=。* \ d)(?=。* \ p {L})'。但是,您的解決方案不允許其他字符,如標點符號嗎? – Abel

+0

@Abel:是的,你說得很對,我誤解了這個問題。答案已更新。 – Toto

2

幾種可能的好的解決辦法已經公佈,但由於運不指定α和什麼數字手段,也許一個簡單的答案是什麼如下:

^(\d+\p{L}+|\p{L}+\d+)+$ 

其中:

  • \d是任何數字
  • \p{L}是任何字母,包括重音字母,例如A,C等
  • (..)進行分組,叔o防止M42的註釋,謝謝! (或重複^和$)

這將匹配所有:ßğł123ħdža3b, 123abc. 1a2b3c, ȬȭɓʥɶÂË32

+0

這符合'1a.b' – Toto

+0

@ M42:我現在看到它,我的壞,修復它,謝謝 – Abel

+0

:不客氣,+1。 – Toto

0

這工作:

^(\d+[A-Za-z_-]+|[A-Za-z_-]+\d+)[A-Za-z_-\d]*$ 

它搜索或者幾個數字,然後幾個字符;或少數字符,然後是少數數字。然後可以有任何字符和數字的混合,或者什麼都不是。

+0

我想知道爲什麼@Abel編輯了幾乎在這個線程中的每一個答覆? – Serge

+1

是的,怪怪的!所有的着色都是錯誤的,我在每個答案中都加了'<! - language:lang-none - >'來解決這個問題(沒有正則表達式着色)。我在歷史日誌中提到了這一點,在那裏你可以看到(或者如果你不同意,可以恢復)。另見:http://meta.stackexchange.com/questions/981/syntax-highlighting-language-hints – Abel

+0

哦,我明白了。謝謝! – Serge

相關問題