正则表达式只在第一个地方禁止连字符

时间:2014-12-18 09:24:33

标签: javascript regex

我是regex的新手所以抓住了一个问题,我用Google搜索但不幸的是没有得到解决方案所以我的问题是: 我需要一个正则表达式,它禁止连字符作为第一个字符(如果它是字符串中唯一的字符)

  

例如: - (禁止)

但是如果我用它写一些数字然后它应该允许它,并且还允许分数值 并且它不应该允许任何字母

  

例如:
   1234(允许)
  -1234(允许)
  -1234.1234(允许)

整个字符串中不允许使用字母,也不能重复连字符。

这是我到目前为止所尝试的:

  

((^ - [0-9] {0,4})|?(^ - [0-9] {0,4})?)([0-9] {1,4})。?

除了以外的所有场景都适用 单连字符即

  

例如: - (允许使用我的正则表达式,但我不应该

真的很感激帮助.. :)

5 个答案:

答案 0 :(得分:1)

我不知道你的意图是什么。在正则表达式的开头添加否定前瞻,不会仅允许-

^(?!-$)((^-?[0-9]{0,4})|(^-?[0-9]{0,4}))(\.[0-9]{1,4})?$

DEMO

您可以将上述正则表达式减少为

^(?!-$)(-?[0-9]{0,4})(\.[0-9]{1,4})?$

答案 1 :(得分:1)

^(?!-$)-?[0-9]{0,4}(?:\.[0-9]{1,4})?$

试试这个。看看演示。

https://regex101.com/r/cA4wE0/20

答案 2 :(得分:1)

表达式允许单个连字符的原因是第一部分允许连字符没有数字,第二部分是可选的。

重新排列部件,以便您允许一个至少有一个数字而没有分数的数字,或一个数字至少为零的数字:

^-?(([0-9]{1,4})|([0-9]{0,4}\.[0-9]{1,4}))$

演示:



function validate(s) {
  var ok = /^-?(([0-9]{1,4})|([0-9]{0,4}\.[0-9]{1,4}))$/.test(s);
  // show result in Stackoverflow snippet
  document.write(s + ' : ' + (ok ? 'allowed' : 'not allowed') + '<br>');
}

validate('-');
validate('1234');
validate('1234.123');
validate('1234.12345');
validate('12345');
validate('.123');
validate('.12345');
validate('-1234');
validate('-1234.123');
validate('-1234.12345');
validate('-12345');
validate('-.123');
validate('-.12345');
&#13;
&#13;
&#13;

答案 3 :(得分:0)

为什么不在没有正则表达式的情况下做到这一点?尝试这样的事情:

var str1 = '-';
var str2 = '-1234';
var str3 = '1234';
var str = str1;

if (str.length == 1 && str == '-')
   alert('Not Allowed');

答案 4 :(得分:0)

这听起来像你想要的:

^(?!.*[a-zA-Z])([^-]|.*\d).*

这意味着:

  • 没有a-z任何地方
  • 要么不以连字符开头,要么包含数字