[英]Regex returns with incorrect value
我正在嘗試使用正則表達式創建一個函數,該函數可以確定我的字符串值是否正確。 如果字符串以小寫或大寫字母字符或下划線開頭,則應為true
。 如果以任何其他開頭,則該函數必須返回false
。
我的測試輸入是這樣的: ".dasfh"
這些表達式是我嘗試使用的表達式: [_a-zA-Z]
..., [:alpha:]
...,但是它們都返回true。
我還嘗試了一些簡單的任務:
表達式為[az]
...的"Hadfg"
:返回true
但
表達式為[AZ]
...的"hadfg"
:返回false
有人可以幫助我了解這種行為嗎?
您正在嘗試將字符串中的第一個字符匹配為特定字符,這意味着您必須告訴regex,它必須是字符串中的第一個字符。
正則表達式引擎只是嘗試在整個字符串中查找任何匹配項。
您只用[az]
告訴您的內容是“在字符串的任意位置找到一個小寫字符”。 這意味着:
"Hadfg"
將等於true,因為它可以找到a,d,f或g作為匹配項。 因為沒有小寫字母,所以"HADFG"
將等於false。
例如,當與[AZ]
匹配時, "hADFG"
也會發生同樣的情況,它將能夠找到A,D,F或G作為匹配項,而"hadfg"
將返回false,因為沒有大寫字符。
您要在這里查找的是正則表達式中的^
,它是一種特殊的修飾符,表示“行首”
因此,當您將其應用於正則表達式時,它將類似於: /^[az]/
。
前一行的正則表達式基本上說:“從字符串的開頭開始,第一個字符跟在小寫字母a之后嗎?”
嘗試一下,您會看到的。
對於您的解決方案,您需要/^[_a-zA-Z]/
檢查第一個字符是_,az還是AZ字符。
作為參考,您可以在這些工具中找到備忘單(當然還可以使用它測試您的正則表達式!)
對於參考或教程(如果您想開始了解regexp及其工作方式,建議您從頭到尾閱讀),其中有regular-expressions.info 。
正則表達式從來都不是一件容易的事,要小心使用它,它是一種強大但有時很難處理的野獸:)
PS
我看到您將您的問題標記為“ 電子郵件驗證”,因此我將添加一些額外的正則表達式,以驗證電子郵件地址絕對正確的最低要求,我個人使用:
.+@.+\\..{2,}
當分解時,它看起來像這樣:
.+
-任何一個或多個字符
@
-后跟文字@字符
.+
-任何一個或多個字符
\\.
-后跟文字。 字符
.{2,}
-兩個或多個任意字符
(可選)您可以將{2,}
用+
替換為一個或多個,但這將允許TLD使用1個字符。
要查看RFC電子郵件正則表達式,請檢查此鏈接 。 當我查看該正則表達式時,我基本上只是想在某個角落哭泣,肯定有一些您無法在我的正則表達式未解決的電子郵件地址中執行的操作,但至少可以確保它看起來像可通過電子郵件發送的內容無論如何,如果新用戶決定填寫一些公牛,這不再是我的問題,並且我不想因為巨大的正則表達式也不同意而強迫他們更改那個1字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.