我來驗證下列條件:正則表達式在JavaScript中沒有按預期工作
- 它將使所有的特殊字符
- 必須至少包含1個字母或字母數字僅
- 特殊字符將無法正常工作
我用
/^\d*[a-zA-Z][a-zA-Z0-9]+/
對於所有情況它都能正常工作,但在輸入特殊字符前確實需要2個字符或數字或兩個組合。
例子:
[email protected]#$*()_
失敗,但應該通過[email protected]#$*()_
通過
請幫忙修正正則表達式。
我來驗證下列條件:正則表達式在JavaScript中沒有按預期工作
我用
/^\d*[a-zA-Z][a-zA-Z0-9]+/
對於所有情況它都能正常工作,但在輸入特殊字符前確實需要2個字符或數字或兩個組合。
例子:
[email protected]#$*()_
失敗,但應該通過
[email protected]#$*()_
通過
請幫忙修正正則表達式。
TL; DNR答案:
/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
說明:
表達 「和」 正則表達式的條件是像下面這樣的常見方式:
/
^
(?= pattern 1)
(?= pattern 2)
(?= pattern 3)
etc
/
基本上,我們接受只有當其餘部分匹配所有給定的模式時,纔開始輸入(^
)。否則,整個表達式失敗。
在您的示例中,模式1將匹配所有內容,包括「特殊字符」。從您的評論中,您正在尋找可打印的ASCII範圍。一個ASCII字符是[!-~]
因爲我們不希望任何東西(如「國際字符」),並不允許空字符串,最終的模式是:
[!-~]+$
第二個模式是「至少一個字母」,它可以表述爲:‘別的任何金額,然後一個數字或字母’,即,
.*[A-Za-z0-9]
全部放在一起:
/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
一些測試:
re = /^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
console.log(re.test("hi")) // true
console.log(re.test("[email protected]#$*()_")) // true
console.log(re.test("[email protected]#$*()_")) // false
console.log(re.test("π+1")) // false
console.log(re.test("")) // false
似乎工作!
你的正則表達式需要一個字母字符,後跟一個字母數字字符。很明顯,第一個例子失敗了,第二個例外。
您的情況也有巨大的重疊。說它必須包含「至少一個字母或字母數字字符」與簡單地說它必須包含「至少一個字母數字字符」相同。這種情況也不需要說這個字符串不能全都是特殊字符;儘管在那裏,你可能只是澄清。你所需要的正則表達式是非常簡單的:
/[a-zA-Z0-9]/.test(str)
它的任何地方搜索在str
的字母數字字符。
你能告訴我正確的正則表達式嗎? – user2207833 2013-03-25 14:30:50
但是它會如何處理所有特殊字符? – user2207833 2013-03-25 14:34:00
你爲什麼不嘗試呢?上面的正則表達式不是「錨定的」,_i.e._沒有'^'或'$'將匹配匹配到字符串的開頭或結尾。因此,所有其他字符都被忽略。唯一重要的是字符串中的某個地方有一個字母數字字符。 – 2013-03-25 14:36:20
/[a-zA-Z0-9]/
你的正則表達式:
/[a-zA-Z0-9]/.test(string)
[編輯]這實際上是相同的答案@ acheong87 ...
可以用'\ w'簡化。 – Simon 2013-03-25 14:41:12
@Simon no,\ w還包含下劃線 – Christophe 2013-03-25 14:47:29
好的,可以簡化爲'[^ \ W_]';) – Simon 2013-03-25 14:51:17
您的示例值完全相同,仍然有一個通過,另一個失敗? – Simon 2013-03-25 14:23:07
我的錯誤。現在檢查 – user2207833 2013-03-25 14:25:15
你的第二個例子根本不會失敗,因爲你在正則表達式的末尾忘記了$,表明EOL和「a1」匹配了[a-zA-Z] [a-zA-Z0-9 ] +'。 – Simon 2013-03-25 14:27:16