JaanVvk Ответов: 1

Как проверить буквенно-цифровую строку с подчеркиванием фиксированного формата в Perl


Привет Команда,

Я новичок в perl-скрипте и использую регулярное выражение для проверки пользовательского ввода в фиксированном формате.Я должен принять только два формата строки в качестве входных данных.

Формат 1# R99.999 {До любого числа, но оно должно начинаться с R и доходить до некоторых цифр после десятичной дроби}

Формат 2# ABCHD1234_GHI123_XYZ123_R99.999 {любой символ верхнего и нижнего регистра с цифрой и подчеркиванием перед R99.999 будет там всегда}

Все остальное приведет к тому, что сценарий потерпит неудачу.

Что я уже пробовал:

I have written below piece of code but getting error.

#! /usr/bin/perl -w

my $usage = "Usage : $0 <user input is required>

# Validation of user input

if (($dest !~ /^R\d+\.\d/) || ($dest !~ "/^[\w_]+/R\d+\.\d/")){
die "ERROR: $dest is not a valid input";
} esle {
     print " $dest is correct";
}


I got error like-
Search pattern not rterminated at ./MyTest.pl line

Note- if ($dest !` /^R\d+\.\d/)    this works alone to validate input like R99.999 but we need to validate both formats

Peter_in_2780

если (($dest !~ /^R\d+\.\d/) || ($dest !~ "/^[\w_]+/R\d+\.\d/")){

Как раз перед вторым р у вас есть ложная /

JaanVvk

Итак, вы предлагаете удалить '/' перед вторым R?

JaanVvk

Когда я удалил его, он выдает еще одну ошибку, например-

если (($dest !~ /^R\d+\.\d/) || ($dest !~ "/^[\w_]+R\d+\.\d/")){

Ошибка - обратная косая черта найдена там, где оператор ожидал около "R\"
Строка без кавычек "d" может столкнуться с будущим зарезервированным словом
Синтаксическая ошибка рядом с буквой "R".

Мне нужно объединить эти два регулярных выражения, так что если какой-либо вход, который отрицает ожидаемые форматы 1 & 2, приведет к сбою скрипта

1 Ответов

Рейтинг:
6

k5054

Ваша логика работает в обратном направлении. Когда A != B || A != C тогда это будет evalutate к истинный если не B == C

A = 2
B = 2
C = 3
A != B  => false
A != C  => true
false || true => true

Вы хотите использовать && вместо.

Вы также можете проверить свои регулярные выражения:
1) выражение соответствия не должно заключаться в кавычки
2) у вас, кажется, есть случайный обратный Слэш перед R во втором предложении
3) нет никакого правого якоря ($) для любого термина, так что он будет соответствовать R99.9a Например, ваш простой случай будет /^R\d+\.\d+$/
4) \w включает в себя подчеркивание, поэтому вам не нужно добавлять его в класс символов
5) Хотя вы этого не говорите, вам, возможно, придется начать сложный узор с буквы. В этом случае шаблон должен начинаться с /^[A-Za-z]...