2013-06-07 5 views
0
<form name="form1"> 
<input type="textbox" name="txtInput" /> 
<script type="text/javascript"> 
function validate() { 
if (! document.form1.txtInput.value.match(/\bSun(il)? (Mishra)?\b/)){ 
    alert("Please enter valid value!"); 
} else { 
    alert("Success!"); 
} 
} 
</script> 
<input type="button" name="btnSubmit" onclick="validate()" value="Go" /> 

Это дает успех на Сунил Мишра, Sun Мишра, но не для Сунил ИЛИ Солнца. Я попытался ввести вход с пространством, но это также не работает.Javascript регулярные выражения неожиданные результаты

Есть ли какая-то проблема в коде?

+0

удалить пустое место – Rinku

ответ

4

Если пространство не является обязательным, оно должно быть во второй группе тоже:

/\bSun(il)?(Mishra)?\b/ 

Причина добавления пробела в конце концов, не будет работать, потому что нет границы слова (\b) на конец строки после пробела.

1
/\bSun(il)? (Mishra)?\b/ 

Причина этого не соответствует Sun или Sunil по себе без Mishra из-за пространства между двумя именами в шаблоне регулярного выражения.

Пространство не отображается как необязательное, поэтому шаблон не будет соответствовать, если пространство отсутствует, хотя Mishra не является обязательным.

Чтобы это исправить, переместите скобки вокруг Mishra включить пространство перед ним:

/\bSun(il)?(Mishra)?\b/ 
+0

Образец не будет работать, даже если пространство добавлено, как указано миниатюром –

0

Вместо того, чтобы добавить пространство во второй группе, как и другие ответы отметили, вы можете использовать : /\bSun(il)?\s*(Mishra)?\b/. Это позволит использовать более одного пространства, вкладок и т. Д., А также сохранить его из результата группы Мишры.