2013-03-25 31 views
1

我來驗證下列條件:正則表達式在JavaScript中沒有按預期工作

  1. 它將使所有的特殊字符
  2. 必須至少包含1個字母字母數字僅
  3. 特殊字符將無法正常工作

我用

/^\d*[a-zA-Z][a-zA-Z0-9]+/ 

對於所有情況它都能正常工作,但在輸入特殊字符前確實需要2個字符或數字或兩個組合。

例子:

  1. [email protected]#$*()_失敗,但應該通過

  2. [email protected]#$*()_通過

請幫忙修正正則表達式。

+1

您的示例值完全相同,仍然有一個通過,另一個失敗? – Simon 2013-03-25 14:23:07

+0

我的錯誤。現在檢查 – user2207833 2013-03-25 14:25:15

+0

你的第二個例子根本不會失敗,因爲你在正則表達式的末尾忘記了$,表明EOL和「a1」匹配了[a-zA-Z] [a-zA-Z0-9 ] +'。 – Simon 2013-03-25 14:27:16

回答

1

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 

似乎工作!

0

你的正則表達式需要一個字母字符,後跟一個字母數字字符。很明顯,第一個例子失敗了,第二個例外。

您的情況也有巨大的重疊。說它必須包含「至少一個字母或字母數字字符」與簡單地說它必須包含「至少一個字母數字字符」相同。這種情況也不需要說這個字符串不能全都是特殊字符;儘管在那裏,你可能只是澄清。你所需要的正則表達式是非常簡單的:

/[a-zA-Z0-9]/.test(str) 

它的任何地方搜索在str的字母數字字符。

+0

你能告訴我正確的正則表達式嗎? – user2207833 2013-03-25 14:30:50

+0

但是它會如何處理所有特殊字符? – user2207833 2013-03-25 14:34:00

+0

你爲什麼不嘗試呢?上面的正則表達式不是「錨定的」,_i.e._沒有'^'或'$'將匹配匹配到字符串的開頭或結尾。因此,所有其他字符都被忽略。唯一重要的是字符串中的某個地方有一個字母數字字符。 – 2013-03-25 14:36:20

0
  1. 它將使所有的特殊字符 =>沒有必要測試,任意字符串匹配這條規則
  2. 必須至少包含1個字母或字母 =>/[a-zA-Z0-9]/
  3. 只有特殊字符將無法正常工作 =>這已由第二個條件解決。

你的正則表達式:

/[a-zA-Z0-9]/.test(string) 

[編輯]這實際上是相同的答案@ acheong87 ...

+0

可以用'\ w'簡化。 – Simon 2013-03-25 14:41:12

+0

@Simon no,\ w還包含下劃線 – Christophe 2013-03-25 14:47:29

+0

好的,可以簡化爲'[^ \ W_]';) – Simon 2013-03-25 14:51:17

相關問題