2017-09-29 105 views
1

我有兩種javascript模式:「結合」2個正則表達式與邏輯或?

/^[A-z0-9]{10}$/ - 長度爲10個字母數字符號的字符串。

/^\d+$/ - 任何數量的一個的至少長度。

如何使OR或任意數字的字符串表達式?

var pattern = /^([A-z0-9]{10})|(\d+)$/;

不會因某些原因。它通過在免得

pattern.test("123kjhkjhkj33f"); // true 

這是不號碼,而不是爲了A-z0-9串10的長度。

回答

3

注意您的^([A-z0-9]{10})|(\d+)$圖案在字符串的開始(所述^僅修改([A-z0-9]{10})部分(第一選擇分支),或在所述端部(|)1或多個數字從A-z0-9範圍10個字符相匹配與(\d+)$ stirng(在$只修改(\d+)分支圖案

另外請注意A-z是一個錯字,[A-z] does not only match ASCII letters

您需要進行如下修正:。

var pattern = /^(?:[A-Za-z0-9]{10}|\d+)$/; 

或與i修改:

var pattern = /^(?:[a-z0-9]{10}|\d+)$/i; 

regex demo

請注意,分組在這裏很重要:(?:...|...)使錨適用於他們的每個適當。

詳細

  • ^ - 串
  • (?:的開始 - 非捕獲交替組:
    • [A-Za-z0-9]{10} - 10個字母數字字符
    • | - 或
    • \d+ - 1個或多個數字
  • ) - 分組的端構造
  • $ - 串的端