2017-03-14 351 views
1

我正在尋找一個正則表達式,它需要字母和數字字符(不只是數字或只是字母),是一個特定的長度。正則表達式 - 長度限制和字母數字

我知道這可以通過使用兩個正則表達式或其他程序代碼來檢查長度,但我想知道是否有可能只是使用一個正則表達式。

這樣可以捕獲但不受長度的限制。

([0-9]+[a-z]+|[a-z]+[0-9]+)[0-9a-z]* 

這不幸的是不起作用

(([0-9]+[a-z]+|[a-z]+[0-9]+)[0-9a-z]){10} 
+1

至少相關的,不知道欺騙:。http://stackoverflow.com/a/21456918/3836111 –

+0

有意思,我會檢查出來 –

+2

['^(= * \ d)(?=。* [a-zA-Z])([a-zA-Z \ d] {10} $)'](https://regex101.com/r/xcTWyw/1) –

回答

2

你可以使用正前瞻?=驗證字母和數字的存在和捕捉使用限制{10}

^(?=.*\d)(?=.*[a-zA-Z])([a-zA-Z\d]{10}$)

演示

const regex = /^(?=.*\d)(?=.*[a-zA-Z])([a-zA-Z\d]{10}$)/; 
 
console.log(regex.test('abcdefghi9')); 
 
console.log(regex.test('211212jknN')); 
 
console.log(regex.test('211212jknnd')); // extra length 
 
console.log(regex.test('2121212122')); // no alphabets 
 
console.log(regex.test('csdcdcdcdc')); // no digits


更新:要查找單行所有比賽使用

\b(?=[a-zA-Z]+\d|\d+[a-zA-Z])[a-zA-Z\d]{10}\b

(?=[a-zA-Z]+\d:一個或多個a-zA-Z和一個數字

|\d+[a-zA-Z]):或一個或多個數字和一個a-zA-Z

演示

const regex = /\b(?=[a-zA-Z]+\d|\d+[a-zA-Z])[a-zA-Z\d]{10}\b/g; 
 
const str = 'sasas12212 aaaaaaaaaa 211212jknn 211212jknnd 2121212122 csdcdcdcd1 csdcdcdc12'; 
 
console.log(str.match(regex));

+0

我剩下的問題是 - 我沒有在我的問題中澄清 - 當文本字符串包含許多其他字或空格。例如'regex.test('abcdefghij 1234')'增加空格會得到一個匹配。 (省略'^'和'$') –

+0

通過[demo](https://regex101.com/r/vfhqEO/1)澄清字符串不是多行且包含空格 –

+1

@ F.Rakes嘗試更新 –

0

嘗試這樣的事情。這種情況下,長度爲3

^(?=.{3,3}$)[a-zA-Z0-9]*(?:_[a-zA-Z0-9]+)*$