التحقق من صحة اسم المستخدم كأجل أبجدي رقمي مع الشرطة السفلية

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

  •  19-09-2019
  •  | 
  •  

سؤال

في صفحة التسجيل الخاصة بي، أحتاج إلى التحقق من صحة أسماء المستخدمين بأجداد أبجدي رقمي فقط، ولكن أيضا مع الشرطة السفلية الاختيارية. لقد جئت مع هذا:

function validate_alphanumeric_underscore($str) 
{
    return preg_match('/^\w+$/',$str);
}

التي يبدو أنها تعمل بخير، لكنني لست خبير ريجيكس! هل أي شخص بقعة أي مشكلة؟

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

المحلول

الفعلية شخصيات متطابقة من \w تعتمد على اللغة التي يتم استخدامها:

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

لذلك يجب أن تحدد بشكل أفضل صراحة الشخصيات التي تريد السماح بها:

/^[A-Za-z0-9_]+$/

هذا يسمح فقط بأحرف أبجدية رقمية و Ulererscore.

وإذا كنت ترغب في السماح بالأكد فقط كحرف تسلسل وتريد إجباره على أن اسم المستخدم يجب أن يبدأ بحرف الأبجدية:

/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/

نصائح أخرى

إليك وظيفة مخصصة للتحقق من صحة السلسلة باستخدام php ctype_alnum. بالتزامن مع مجموعة من الأحفير المسموح بها:

<?php

$str = "";
function validate_username($str) {

  // each array entry is an special char allowed
  // besides the ones from ctype_alnum
  $allowed = array(".", "-", "_");

  if ( ctype_alnum( str_replace($allowed, '', $str ) ) ) {
    return $str;
  } else {
    $str = "Invalid Username";
    return $str;
  }
}

?>

محاولة

function validate_alphanumeric_underscore($str) 
{
    return preg_match('/^[a-zA-Z0-9_]+$/',$str);
}

يبدو بخير بالنسبة لي. لاحظ أنه لا تطلب أي شرط لمواصلة الشرطة السفلية، لذلك "اسم المستخدم_" و "___ استخدم" كلاهما.

وأود أن آخذ Regex الثانوي في Gumbo، للسماح فقط بالتسجيل السفلية كسلسل، ولكن أضف A + بعد _، لذلك يمكن للمستخدم أن يكون مثل "special__usname"، مجرد قرص بسيط.

/^[A-Za-z][A-Za-z0-9]*(?:_+[A-Za-z0-9]+)*$/

الحل الخاص بك هو بخير تماما.

preg_match يستخدم التعبيرات العادية تشبه بيرل، حيث فئة الشخصية \w محددة لتتناسب مع ما تحتاجه تماما:

\w - تطابق حرف "كلمة" (أبجدي رقمي زائد "_")

(مصدر)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top