如何使用正则表达式检查字符串是否为不以0开头的正整数?

时间:2018-12-08 20:34:58

标签: javascript regex html5

经过大量研究,我还没有发现满足所有这些IF条件的正则表达式。该代码很好用,但我认为可以使用RegEx对其进行简化。

目标:对从1到9的正整数返回true,而不是从零开始。对于其他每个值,返回false。

看看。

 <ListBox Name="listCars" ItemsSource="{x:Bind cars}" >
            <ListBox.ItemTemplate>
                <DataTemplate x:DataType="Car">
                    <StackPanel Padding="20">
                        <Image Width="200" Height="150" HorizontalAlignment="Left" Source="{x:Bind imgCar}" />
                        <TextBlock FontSize="22" HorizontalAlignment="Left" Text="{x:Bind Name}" Style="{StaticResource HeaderTextBlockStyle}"/>
                        <TextBlock FontSize="16" HorizontalAlignment="Left"> € <Run Text="{Binding Price}" /></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
// Validation functions


function hasPeriod(s) {
  // Return true or false.
  // True if a period is entered at any point in time.
  return s.indexOf('.') > -1;
}
// See more... http://2ality.com/2014/05/is-integer.html
function isInteger(s) {
  // Return true or false.
  // True if the remainder of dividing it by 1 is 0.
  return s % 1 === 0;
}



// Bind keyup event to prep_work_item_input.
$('#input1').on('keyup', function (e) {

  // TRIM text input value on declaration...
  // May contain spaces...
  var input_value = $(this).val().trim();

  // Refresh text input after Trim!
  // Does not contain spaces
  $(this).val(input_value);

  // If text input is EMPTY after Trim...
  if (input_value.length == 0) {

    // Stop at this if and dont proceed.
    return false;

  } 

  // If a PERIOD is typed into text input at any point in time...
  if (hasPeriod(input_value)) {

    // Clear input
    $(this).val('');

    // Stop at this if and dont proceed.
    return false;

  }

  // If text input value is NOT an INTEGER...
  if (!isInteger(input_value)) {

    // Clear input
    $(this).val('');

    // Stop at this if and dont proceed.
    return false;
  }

  // If text input value IS an INTEGER but EQUAL to 0...
  if (input_value == 0) {

    // Clear input
    $(this).val('');

    // Stop at this if and dont proceed.
    return false;
  }

  // If text input value IS an INTEGER and also GREATER than 0...
  if (input_value > 0) {

    // If we have made this far... 
    // we probably have a real integer that is not zero.

    // We can finally begin to calculate

    input_value = parseInt(input_value);

    // random cost multiplier for this example
    var cost = parseFloat('0.78');

    // calculate subtotal...
    cost = input_value * cost;

    // Set prep_work_item_subtotal...        
    console.log(input_value + ' ' + 'SF' + ' / ' + ' $' + cost.toFixed(2));

  }

});

2 个答案:

答案 0 :(得分:2)

正则表达式不是您要尝试做的解决方案。

您应该做的是根据确切的if语句失败向用户提供有意义的错误消息。

例如,如果您的输入需要.,但没有输入,那么您可以准确地告诉用户您要从他们那里得到什么。但是,如果您只有一个大型的über-regex,您将绝对无法知道导致它失败的原因。

考虑一下UX的这一课!


或者只是使用正确的输入类型。

<input type="number" min="0.01" step="0.01" />

答案 1 :(得分:2)

通过阅读代码,您似乎需要检查数字是否大于0。
您可以使用此正则表达式执行此操作:

^[1-9]\d*$

它将检查输入内容:
-以数字开头但不是0
-包含任意数字
-确实以数字结尾