لماذا بلادي بيرل آر /// إزالة أسطر جديدة؟

StackOverflow https://stackoverflow.com/questions/1652814

  •  22-07-2019
  •  | 
  •  

سؤال

وأنا أحاول لتنظيف شكل مدخلات باستخدام الحروف بيرل التالية:

sub ValidateInput {
 my $input = shift;
 $input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\\{}[]?! -//cd;
 return $input;
}

ولكن المشكلة هي أن هذه الحروف وإزالة جزءا لا يتجزأ من أحرف السطر الذي يمكن للمستخدمين الدخول في حقل ناحية النص الذي أريد أن تبقي كجزء من السلسلة. أي أفكار عن كيف يمكن تحديث هذا لمنعه من إزالة الأحرف السطر الجديد جزءا لا يتجزأ؟ ويرجع الفضل في ذلك مسبقا لمساعدتكم!

هل كانت مفيدة؟

المحلول 4

وشكرا للمساعدة رجال! في نهاية المطاف قررت لمعالجة كافة البيانات في قاعدة البيانات الخاصة بنا لإزالة الطابع الذي يسبب المشكلة بحيث أن أي النص الذي تم تقديمه عن طريق استمارة التحديث لدينا (وليس تغييرها من قبل المستخدم) أن تتطابق مع ما كان في قاعدة البيانات. لكل اقتراحاتكم أود أيضا أن أضيف بعض الأحرف المسموح إضافية إلى التعابير المنطقية التحقق من الصحة.

نصائح أخرى

ولست متأكدا ما تقومون به، ولكن أظن أنك تحاول منع جميع الأحرف بين الفضاء وتيلدا في جدول ASCII، جنبا إلى جنب مع بعض الشخصيات المسافات الفارغة. وأعتقد أن معظم من قائمتك يتكثف إلى \x20-\x7e مجموعة واحدة:

$string =~ tr/\x0a\x0d\x20-\x7e//cd;

إذا كنت تريد ضرب شخصية مثل " (على الرغم من أنني أشك كنت تريد حقا منذ كنت تسمح الاقتباس واحد)، فقط ضبط النطاق الخاص بك:

$string =~ tr/\x0a\x0d\x20-\xa7\xa9-\x7e//cd;

وهذا قليلا من وسيلة البيزنطية من يفعل ذلك! إذا قمت بإضافة \ 012 يجب الحفاظ على أسطر جديدة.

$input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\{}[]?! \012-//cd;
scroll top