确定字符串" geb。"进入了

时间:2016-08-22 22:01:33

标签: javascript regex search

我想检查字符串" geb。"或者" geb"进入了一个领域。我接近解决方案,但这段时间给我带来了麻烦:

\( … \)

我创造了一个小提琴来测试它:https://jsfiddle.net/spade/3rv2s3sc/ 但无法弄清楚。

有人可以帮我一把吗?

提前致谢。

4 个答案:

答案 0 :(得分:0)

正则表达式必须与/分隔,而不是'。此外,除非您也需要,否则您不应该在开头有空格。您可以使用.match()代替.search()来获取真值/假值,而不是与-1进行比较。 i修饰符会使匹配不区分大小写,因此您不必调用toUpperCase()



$("input").change(function() {
  var Name = this;
  if (Name.value.match(/geb[. ]/i)) {
    alert('Die Angabe des Geburtsnamens ist nicht erforderlich. Bitte weglassen!');
    this.focus();
    return false
  };
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text">
&#13;
&#13;
&#13;

答案 1 :(得分:0)

此解决方案满足您的要求:

<input type="text" name="Name" size="25" 
 title="Hier nur Vor- und Nachnamen in dieser Reihenfolge eingeben (bitte ohne Zusatz des Geburtsnamens!)." 
 value="Eva Gebhard geb. Zander" 
 onchange="javascript:if(this.value.search(/\bgeb\.?\b/i) > -1){alert('Die Angabe des Geburtsnamens ist nicht erforderlich. Bitte weglassen!'); setFocus(this); return false};" 
/>

这是正则表达式:

/\bgeb\.?\b/i

更新了JSFiddle:https://jsfiddle.net/3rv2s3sc/6/

正则表达式的说明:

  • 基础知识:
    • JavaScript中的正则表达式用正斜杠/
    • 括起来
    • \b表示&#34;字边界。&#34;一个词不一定是人类语言中的实际词。它被定义为&#34;字符的开头或结尾。&#34;这些取决于具体情况。在我们的例子中,我们可以将其视为字母表中的字母。有关详细信息,请参阅Word Boundaries
    • .是一个特殊字符,意思是&#34;任何字符。&#34;因此,如果你想要一个简单的时期,你需要逃避特殊的角色。&#34; &#34;逃脱角色&#34;是反斜杠\。因此,文字句点表示\.
    • ?是一个特殊字符,它使前面的标记可选。 (A&#34;标记&#34;是字符/组/子表达式。)
    • 在正则表达式的结束正斜杠之后,您可以指定许多选项或指令。此处i表示&#34;不区分大小写。&#34; (这就是我的解决方案不需要toUpperCase()功能的原因。)
  • 用普通语言解释:
    • 匹配/
    • 的正则表达式
    • 一个以单词边界开头的字符串(可以是一个空格,一个句点,一个短划线等等 - 重点是,我们匹配一个截然不同的单词)\b
    • 字符串geb
    • 可选的句点字符\.?
    • 和另一个单词边界\b
    • 该匹配不区分大小写。 /i

有关JavaScript正则表达式的更多信息,请访问以下网站:

答案 2 :(得分:0)

试试这个:

<input type="text" name="Name" size="25" title="Hier nur Vor- und     Nachnamen in dieser Reihenfolge eingeben (bitte ohne Zusatz des Geburtsnamens!)." value="Eva Gebhard geb. Zander" 
            onchange="if (this.value.toUpperCase().match(/GEB/ ) )  {alert('Die Angabe des Geburtsnamens ist nicht erforderlich. Bitte   weglassen!'); setFocus(this); return false};" />

答案 3 :(得分:0)

您在处理程序中使用变量Name,这是未定义的。您需要使用this进行测试,this.focus()是处理程序上下文中的输入元素。此外,除非您在别处定义,否则setFocus()不是函数。使用/.../重置焦点(虽然我假设您出于测试原因而只是这样做)。

您不需要使用search来指示Javscript搜索功能的正则表达式。 JS match会自动将字符串转换为正则表达式。但是,Barmar使用search而不是<input type="text" name="Name" size="25" title="Hier nur Vor- und Nachnamen in dieser Reihenfolge eingeben (bitte ohne Zusatz des Geburtsnamens!)." value="Eva Gebhard geb. Zander" onchange="if (this.value.toUpperCase().search(' GEB[. ]') > -1) {alert('Die Angabe des Geburtsnamens ist nicht erforderlich. Bitte weglassen!'); this.focus(); return false};" /> 的观点对于你的情况是一个很好的,因为你不关心字符串中匹配发生的位置的索引,只是字符串是否正确在任何地方都有发生。

关于你在测试中的前一个空格的注释也很好,因为你的问题是关于'geb'和'geb.'。假设你正确地表达了你的问题,你不应该在你的条件测试中占据领先的空间。

为了说明您的代码无效的原因,这是一个有效的修改,尽可能保持相同,以便您能够理解错误

function myFunction(el) {
  value = el.value;
  if (value.match(/geb[. ]/i)) {
    alert('Die Angabe des Geburtsnamens ist nicht erforderlich. Bitte weglassen!'); 
    el.focus();
    return false;
  }
}

这是另一个显示其他用户评论的例子:

<input type="text" name="Name" size="25" title="Hier nur Vor- und Nachnamen in dieser Reihenfolge eingeben (bitte ohne Zusatz des Geburtsnamens!)." value="Eva Gebhard geb. Zander" onchange="myFunction(this)"/>
ccs_cc_args = 

ccs_cc_logsvc = function ccs_cc_logsvc(){var t=this;t.pStart="ccs_cc_log_startTime",t.pInit="ccs_cc_initParams",t.pId=t.genGuid(),"undefined"==typeof window[t.pStart]&&(window[t.pStart]=(new Date).getTime()),t.ping=function(){t.pingCount++,t.pingCount>1&&t.sendEvent("Ping"),t.pingCount<=t.maxPing&&window.setTimeout(t.ping,t.pingPeriod)};try{t.host=window.location.href.substr(0,300)}catch(e){}t.cnt=0,t.init(),t.sendEvent("TInit",null,!0),t.setPing(0,15e3)}
ccs_cc_contentloader = function ccs_cc_contentloader(t){var e=this,c="ccs_loading_scripts";"undefined"==typeof window[c]&&(window[c]=[]),e.isLoading=!1,e.addedObjects=[],e.waitLoadScripts=[],e.cssToLoad=0,e.scriptToLoad=0,e.objName=t,e.addedRefs=[],e.loadingCSS=[],e.isLoadFinishing=!1,e.objectToLoad=null,e.contextId=null,e.lastScript=null,e.lastTarget=null,e.navigated=!0,e.defaultUrl={},e.loadingScripts=window[c],e.ccsHost=ccs_cc_log.ccsHost,e.skey=ccs_cc_log.skey,window.setInterval(function(t){return function(){t.navTo()}}(this),50)}

ccs_cc_log = [object Object]
ccs_cc_initParams = ,ws.pagecontent.com

ccs_cc_log_startTime = 1471905959132

ccs_cc_debug_lastUrl = http://ws.pagecontent.com/7f08cde9/script/hp-auto-pp?cpn=CPN&mf=HP&pn=T1C06…ean=UPC_EAN_CODE&lang=ES&market=MX&host=&nld=1

ccs_cc_loadQueue = 

ccs_loading_scripts = 
ccs_cc_ld_hp-auto-pp = [object Object]
ccs_cc_loge_aa0e4d = function ccs_cc_loge_aa0e4d(id, clientParams, args){var et; var serverParams;switch (id) {
case '5901d207': et='ProductHookLoad'; serverParams={"ServerTime":"1","ResultCode":"100"}; break;
} ccs_cc_log.logEvent (et, 'SKey=abcd74589&LCID=2415&Market=MX&Locale=ES-MEX&ZoneId=hp-auto-pp&ZoneVer=1&SMfgName=HP&SMfgPn=TOM025HAC6547&MfgId=23', serverParams, clientParams); }