只有一个空格或一个超文本的字母数字的正则表达式

时间:2015-11-19 05:54:05

标签: javascript jquery regex regular-language

我需要一个需要满足以下条件的正则表达式: -

  1. 它应该接受字母数字
  2. 只有一个spacehyphen或两者都可以。但无论如何,它应该只有一个space或一个hyphen
  3. 最大总长度应为10个字符
  4. 例如有效数据

    • W1A 1HQ
    • 1234-456
    • IT-12345
    • 12345

    到目前为止,我已尝试使用以下表达式,但它无法正常工作

    (^[a-zA-Z0-9][^\s\-].*[^\s\-][a-zA-Z0-9]){0,8}
    

    我需要在这里修改一下吗?

    修改
    这里发布的解决方案并不接受String中的一个空格和一个hypen的组合。 请提供一个表达式,以组合方式支持所有要求。

4 个答案:

答案 0 :(得分:4)

您可以使用正则表达式/^(?=.{0,10}$)[a-z0-9]+(?:[\s-][a-z0-9]+)?$/i

DEMO:

$('#input').on('input', function() {
  $('#res').text(this.value.match(/^(?=.{0,10}$)[a-z0-9]+(?:[\s-][a-z0-9]+)?$/i) ? 'Valid' : 'Not Valid')
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="input">
<div id="res"></div>

<强> Explanation here

^(?=.{0,10}$)[a-z0-9]+(?:[\s-][a-z0-9]+)?$

Regular expression visualization

<小时/> 更新:

  

只有一个空格或连字符或两者都可以

<强> /^(?=.{0,10}$)[a-z0-9]+(?:([\s-])[a-z0-9]*(?:(?!\1)[\s-])?[a-z0-9]+)?$/i

$('#input').on('input', function() {
  $('#res').text(this.value.match(/^(?=.{0,10}$)[a-z0-9]+(?:([\s-])[a-z0-9]*(?:(?!\1)[\s-])?[a-z0-9]+)?$/i) ? 'Valid' : 'Not Valid')
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="input">
<div id="res"></div>

^(?=.{0,10}$)[a-z0-9]+(?:([\s-])[a-z0-9]*(?:(?!\1)[\s-])?[a-z0-9]+)?$

Regular expression visualization

答案 1 :(得分:1)

此表达式也验证:

  

只有一个spacehyphen都可以在那里

并允许字符串的开头或结尾处的连字符/空格。

<强>正则表达式

/^(?!(?:[^-]*-){2}|(?:[^ ]* ){2})[- a-z0-9]{0,10}$/i

regex101 demo

匹配:

  • ^字符串开头
  • (?!(?:[^-]*-){2}|(?:[^ ]* ){2})后面没有:(negative lookahead
    • (?:[^-]*-){2}) 2个连字符,或
    • (?:[^ ]* ){2} 2个空格
  • [- a-z0-9]{0,10}字母数字,连字符或空格,最大长度为10
  • $字符串结尾
  • 模式/i:不区分大小写的匹配

<强>代码

&#13;
&#13;
str = "-ABC 123";
re = /^(?!(?:[^-]*-){2}|(?:[^ ]* ){2})[- a-z0-9]{0,10}$/i;

if (str.match(re)) {
  document.body.innerText += "VALID";
} else {
  document.body.innerText += "Invalid string";
}
  
&#13;
&#13;
&#13;

答案 2 :(得分:0)

试试这个:

^(?=.{1,10}$)([a-zA-Z0-9]+\s{0,1}[a-zA-Z0-9]*\-{0,1}[a-zA-Z0-9]+)$

详细说明请点击此处:https://regex101.com/r/hV3rJ2/1

答案 3 :(得分:0)

// Parameter: String which has to be checked with a
//   regular Expression.

function checkString(toCheck) {

  if (toCheck.length <= 10) {
    var reg = /^[a-zA-Z0-9]+(\s|-|\s-|-\s)?[a-zA-Z0-9]+$/;

    if (reg.test(toCheck)) {
      return true;
    } 
  } 

 return false;
}

关于codepen的完整示例: http://codepen.io/mizech/pen/EVMRJG