2017-04-10 78 views
-1

我想允許3個字符的第一個下劃線(_),第2連字符( - )第三點正則表達式只有一次一個特殊字符從允許的特殊字符的Javascript

,但我想提出的條件,只有()。一次只允許一個角色出現,也只有一次。

允許用戶名= abc.def,ABC-DEF,abc_def
不允許用戶名= abc.de.f這裏警報(只有一個特殊字符是在允許的用戶名)
不允許用戶名= abc.de -f,abc.de_f,ab-cd_ef

我該怎麼做。

+0

有許多資源,針對學習正則表達式。自己試一試,當你遇到比「我該怎麼做」更具體的問題時,回來再發布一些代碼。 – Archer

+0

因此,字母連字符,下劃線或點,然後更多的字母字符? '^ [a-zA-Z] + [-._] [a-zA-Z] + $' – chris85

+0

@ chris85對不起,我忘了提及,字母和數字都允許 –

回答

0

嘗試/^[a-z]*[-._]?[a-z]*$/

var tests = ['abc.def', 'abc-def', 'abc_def', 'abc.de.f','abc.de-f' , 'abc.de_f', 'ab-cd_ef']; 
 
$.each(tests, function(a,b) { 
 
    $('body').append('<div>' + b + ' = ' + regIt(b) + '</div>'); 
 
}); 
 

 
function regIt(str) { 
 
    return /^[a-z]*[-._]?[a-z]*$/.test(str); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

+0

該點不需要在角色類中轉義。如果你先將'-'放入,它也不需要被轉義。這也將允許空的用戶名。 – chris85

+0

@ chris85,謝謝 – br3t

+0

@ br3t它工作得很好,我正在尋找。我只是使用 if(!/^[a-zA-Z0-9] * [-._]?[a-zA-Z0-9] * $ /。test(x)) 感謝br3t和chris85 。愛你前輩:) –

0

此正則表達式,直到它到達字符串的結尾將匹配字母。如果它到達一個符號(-._),它會將該符號存儲爲組1,並在字符串末尾保持字母或相同符號的匹配。

以下是匹配的例子:

  • 一個空字符串
  • _something
  • something-something
  • foo_bar_baz
  • foo.

這裏AR Ë一些無效的字符串:

  • my_file.txt
  • alpha.bravo_charlie
  • not-working_
+0

OP只想要一個特殊字符。 'foo_bar_baz'不允許,因爲有2個下劃線。 – Toto

+0

@Toto的確,我誤解了。然後br3t的答案是正確的。 –