2015-11-13 86 views
2

我想創建一個正則表達式,可以決定我的字符串值是否正確的函數。它應該是true,如果字符串以小寫或大寫字母字符或下劃線開頭。如果從任何其他開始,該功能必須返回false正則表達式返回不正確的值

我的測試輸入是這樣的:".dasfh"

的表情時,我試圖用:[_a-zA-Z] ...,[:alpha:] ......,但他們兩人返回真。

我嘗試了一下容易的任務也:

"Hadfg"這裏表達的是[a-z] ...:返回true

"hadfg"其中,表達式爲[A-Z] ...:返回false

有人能幫我理解這種行爲嗎?

+1

你需要做什麼?驗證?注意JS不支持像'[:alpha:]'這樣的POSIX字符類。嘗試['/^[a-z_]/i'](https://regex101.com/r/fX2iX4/2)如果驗證的字符串必須*以小寫或大寫字母字符或下劃線*開頭。 –

+0

https://regex101.com/r/iH6kV3/1 – Blag

回答

5

你試圖匹配字符串中的第一個字符是特別的東西,這意味着你必須告訴正則表達式它必須是字符串中的第一個字符。

正則表達式引擎試圖在整個字符串中找到任何匹配。

你用[a-z]告訴它的是「在字符串的任何位置找到一個小寫字符」。這意味着:

"Hadfg"將等於true,因爲它可以找到a,d,f或g作爲匹配。 "HADFG"將等於false,因爲沒有小寫字母。

同時[A-Z]匹配的情況下,它將能夠找到一個A,d,F或G的匹配,而"hadfg"將返回false,因爲沒有大寫字符"hADFG"會發生。

什麼你正在尋找在這裏是在您的正則表達式^,它是一種特殊的改性劑,表示「行首」

所以,當你申請給你的正則表達式它看起來就像這樣:/^[a-z]/
上一行的正則表達式基本上是說「從字符串開始,第一個字符跟隨小寫字母a-z?」

試一試,你會看到。

對於您的解決方案,您需要/^[_a-zA-Z]/來檢查第一個字符是否爲_,a-z或A-Z字符。

僅供參考,您可以在這些工具中找到cheatsheets(並用它來測試您的regexes!)

  1. Regexr - 我個人最喜歡的(使用您的瀏覽器JS正則表達式引擎)
  2. Rubular - Ruby的正則表達式測試儀
  3. Regex101 - 一個Python/PCRE/PHP/JavaScript的

而對於一個參考或教程(如果你想開始理解正則表達式及其工作原理,我建議從頭到尾閱讀)theres regular-expressions.info

正則表達式是不容易的,小心你用它做什麼,這是一個強大的,但有時醜陋的野獸對付:)

PS

我看你標記你的問題作爲所以我會加一點獎金的正則表達式驗證一個電子郵件地址最低要求是絕對正確的,我用這一個個人的看法:

[email protected]+\..{2,}

,當擊破,如下所示:

.+ - 一個或多個任意字符
@的 - 然後是文字@字符
.+ - 一個或多個任意字符
\.的 - 其次是文字。性格
.{2,} - 兩個或多個任意字符

的可選你可以用+取代{2,},使之一個或多個但是這將允許TLD與1個字符。

要看到工作檢查this link一個RFC的電子郵件正則表達式。 當我看到那個正則表達式我基本上只是想在一個角落裏哭的地方,肯定有東西,你不能在我的正則表達式並沒有解決,但至少它使一個電子郵件地址來確定它的東西,看起來像電子可郵寄不管怎麼說,如果新用戶決定以填補一些公牛那不是我的問題了,我不想強​​迫他們改變1個字符,只是因爲巨大的正則表達式不與它要麼同意。

+0

感謝您的快速和可理解的答案。它工作正常。 – Zse

+0

@Ze很高興我能幫忙,開心開發:) – SidOfc