2016-08-30 14 views
0

我熟悉Java正則表達式,但不是Javascript正則表達式。JavaScript正則表達式接受不像Java中的那樣被接受的輸入

我想檢查字符串輸入的有效性,如果它看起來像名字。名字可以是xxxx xxx或xxx,其中x是一個字母。請注意,在我所說的內容中,x的數量有所不同。所以這是我的代碼:

function checkName(name) { 
    var pattern = new RegExp('([A-Za-z]+|[A-Za-z]+\\s[A-Za-z]+)'); 
    return pattern.test(name); 
} 

我已經做了一個函數,將處理我的表單中的文本輸入的名稱。現在它正在爲諸如邁克爾或邁克爾詹姆斯之類的投入工作。但是,它也適用於M3,例如它有一個數字,應該不起作用。那麼這個專家在這個世界上的任何幫助呢?

+3

也許你只是想確保整個字符串相匹配?在開始處添加'^',在末尾添加'$'。試試'var pattern =/^([A-Za-z] + | [A-Za-z] + \ s [A-Za-z] +)$ /;' –

+0

@WiktorStribiżewyes就是我想要的!哈哈哈,謝謝你,先生。我還不知道,但現在我知道了。我熟悉Java正則表達式,但不是Javascript正則表達式。再次感謝你! :) –

+1

@JudeMaranga另外,我認爲下面的表達式更優化: '^ [A-Za-z] +(\\ s [A-Za-z] +)?''' – Vasan

回答

3

JavaScript中沒有matches方法(與Java不同)。如果您只想確保整個字符串與模式匹配,請在開始處添加^,並在末尾添加$。此外,如果您的正則表達式模式是靜態的,建議使用正則表達式文字表示法/.../

使用

var pattern = /^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/; 
       ^^        ^ 

爲了進一步優化它(雖然性能增益將是微小的),你可以使用一個可選的組(?:....)?(見vasancomment):

var pattern = /^[A-Za-z]+(?:\s[A-Za-z]+)?$/; 
         ^^^^^^^^^^^^^^^^ 

regex demo

function checkName(name) { 
 
    var pattern = /^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/; 
 
    return pattern.test(name); 
 
} 
 

 
let log = document.querySelector("#log"), 
 
    test = document.querySelector("#test"); 
 

 
test.addEventListener("input", e => { 
 
    if(checkName(test.value)){ 
 
    log.style.color = "green"; 
 
    log.innerHTML = "Passed!"; 
 
    }else{ 
 
    log.style.color = "red"; 
 
    log.innerHTML = "Failed"; 
 
    } 
 
});
#test:focus{outline: none;}
<input type="text" id="test" autofocus /><br /> 
 
<span id="log"></span>

+0

而且你通常是這樣擅長標記重複... –

+0

什麼是:對? –

+0

@torazaburo:我回答是因爲OP實際上來自Java。 Java'String#matches()'在JavaScript中不存在的事實讓我發佈了一個答案。 –